External Counter

What is the time between pulses?

You might try using an interrupt to capture the start of he pulse and end the interrupt when the pulse is complete.

You also might consider doing this in assembler. You can reduce the time because you would have total control over what registers are used so you could spend less time saving and restoring registers, which takes a bit of time in the arduino code.

I wrote some code for a step & direction stepper driver (ATtiny2313) that was 1200+ bytes in Arduino and I was able to get it in 88 bytes and all running from registers in Assembler. My final interrupt routine was 12 words long, the C version was much longer...