I've trying to optimize the code, but not with a substancial increase in frame rate.
To SCRAGGLE:
Tiling is always a good way of treating huges surfaces, anyway, what i'd do in your case is getimage (px,py,px+wi,py+hi) where:
PX: x position of the sprite
py: y position of the sprite
Wi: width of the sprite
hi:height of the sprite
The resulting image,along with the sprite you ar checking, are the parameters for the collision checking...
I dont think it will improve speed, but certainly improves memory usage.
Further more, if i could see the code of your game (at least the graphics loop) i will have more elements to help you.
9 of every 10 people are exactly the 90 %