If you're moving fast (more than a few pixels in one update), just subdivide the move into several steps. Even pixel-sized steps if you want.
It might just be eaisest to create a shape linking the start position to the end position and then hit-test against that
eg, instead of this, where you hit-test in all of the black boxes (and the light grey one hits):
▓▓▓▓▓▓
▓▓▓ ---> ▓▓▓ ->▓▒▒▒▓▓-> ▓▓▓
▓▓▓ ▓▓▓ ▓▒▒▒▓▓ ▓▓▓
▓▓▓▓▓▓
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
and then resolving it...
▓▓▓▓▓▓
▒▒▒▓▓▓▓▓▓
▒▒▒▓▓▓▓▓▓
▓▓▓▓▓▓
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
you do this, where you test the light grey areas:
▓▓▓▓▓▓
▓▓▓░░░░░░░░░░░░▓▓▓▓▓▓░░░░░░▓▓▓
▓▓▓░░░░░░░░░░░░▓▓▓▓▓▓░░░░░░▓▓▓
▓▓▓▓▓▓
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
and then resolve it by figuring out the last position at which they did not overlap (shown here in medium grey):
▓▓▓▓▓▓
▓▓▓░░░░░░░░░▒▒▒▓▓▓▓▓▓░░░░░░▓▓▓
▓▓▓░░░░░░░░░▒▒▒▓▓▓▓▓▓░░░░░░▓▓▓
▓▓▓▓▓▓
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
This way, you only do one larger ABBA (or box) test, instead of a number of smaller ones. Even if the player is moving diagonally it would just be a matter of doing a few line/line intersection tests instead of a box. It *should* be quicker, however I'm no expert on collision detection/resolution and I haven't tested it so I might be wrong.