Get the ULN2003V12, it's mosfet-based, around 2ohms RDS-on in my measurements.
Normally you don't really need off time, it's enough with the delay of processing the next display.
Don't toggle it at MHz because most of the time will be wasted in the rising and falling edges, 100us on-time per display will give good brightness and completely remove any flickering.
Basically the loop would be:
- load display data
- turn on mosfet
- wait 100us...1ms
- turn off mosfet
- Clear display data, will reduce chance of ghosting effect, you might omit this step.
- repeat with the next display
Then test the displays with "8 . 8 . "
If you see any traces of the "8" in the ".", It might be too fast, try adding 1us delay after turn-off, increase if necessary but shouldn't need a lot.
100us will give a refresh rate of 2.5KHz, you can go slower if required, but as mentioned, better keep it over 200Hz or so (1.25ms/display).
If interrupt-based, 500Hz is a good value.
But as always, better you do it, play with different delays and check the result!