You can estimate the appropriate speed requirement for your motion controller by understanding how fast you need your pulse stream to be. You will need to balance axis travel speed and the step resolution or length of each step in actual machine axis travel. This formula can be used:
Step Length = IPM / 60M / pulses/sec.
So, if you are using a 4khz motion controller, you could set it to go at 2000IPM and get a resolution of less than 0.00008"
Note that on modern stepper drivers, you can use micro-stepping to divide the steps into fractions and get higher resolution. Note that at higher resolution, you will get smoother motion, but you may lose a bit of torque.
On modern servos, you can also adjust the encoder resolution or sometimes they call it electronic gearing. On AC servos, resolutions of 16, 18, 20, and 22 are common, which will be equivalent to 2^16... or 65,536, 262,144, 1,048,576, or 4,194,304. These crazy high resolutions do not really translate in machine precision due to mechanical concerns.
We also recommend using differential signals for step and direction if going above 400khz.
The speeds of some popular motion controllers are:
Parallel Port = between 25 to 100khz Note that the pulse stream is not clean and gets dirtier the faster you go. The higher speeds are only supported on some systems, so it is not a given.
UC100 = 100khz.
UC400ETH, AXBB and UC300ETH can do 400kHz.
MASSO = 110khz
ACORN = 200khz
PoKeys57 = 150khz.
Ethernet Smooth Stepper = 4Mhz.