While I'm working out kinks from my own Arduino BLDC code ( sketch and video here ), I just wanted to throw my 2 cents in case you're still planning to come back to this.
I notices you're using Serial communication as well as delay(100) for step timing and both are very slow processes that will mess up timing of the phase commutation.
On the video in my link you will see the motor twitching once every second - that's me sending RPM values back to the PC via USB. I send a rather long message (about 60 characters including description) but still, it's so slow it almost completely stops the rotor while the Arduino is taking to the PC. It's better not to have serial comms in the program if you're planning to reach beyond a couple hundreds of RPMs.
delay(100) between commutation steps is way too long . The motor has probably 24-36 commutation steps per one 360 degree revolution, so it will be 3.6 seconds 'till it finish one turn. also, while it's waiting for delay to expire it's not doing anything useful. So, your delays would have to be in (hundreds of) microseconds for anything measured in hundreds RPM and you would need to avoid using delay and just check for the timing without stopping the processor to see when it's time for the next step.
Cheers!