I would combine bounding box collision and pixel perfection collision.
So all entities in your game would have bounding boxes, just frames equal to the width and height of your sprite. Use this as your first level collision test. After this is done, and you have a collision, then use the collision maps to get a finer level of detail.
This optimization is going to help with speed, and adds the flexibility to the engine that not all collisions have to be pixel perfect.
As for the actual pixel perfect collision algorithm, what you describe would work. However, if you are going for speed, you might want to try this:
come up with a bitmask for each sprite (like a pixel map, but only one bit per pixel)
for example:
00000000
00100000
01100000
01110000
when one sprite collides with another, create a new bitmask out of the smaller bitmask of the same size of the larger one, and 'offset' it by the difference in position between sprites.
Once this is done, bit-wise 'and' all the bytes in these two masks. If any byte result > 0, you have a collision.