When I profiled my first game (Gravity Core) I found that a major CPU drain was collision checking.
The game was checking every game entity against every other which is an exponential growth problem.
i.e.
Checking 5 objects against 4 (excl self) = 20 checks
Checking 10 objects against 9 = 90 checks
Checking 100 objects against 99 = 9900 checks!!
To help with this, I implemented a heuristic algorythm that clusters together entities so that only relevant groups need to be checked.
It was based on an excellent article in Game Programming Gems 2. (These are great books - just not cheap!)
http://www.amazon.co.uk/Game-Programming-Gems-Vol-CD/dp/1584500549/ref=sr_1_1?ie=UTF8&s=books&qid=1310893296&sr=8-1If you shop around, there are some reasonably priced second hand ones knocking around (e.g. Amazon resellers on Amazon.COM).
It's well worth investigating.
If anyone's interested I can try to dig out some sourcecode, though it will need some rework as it's tied into my sprite interface.