I was using bitmask collision on my current flash/as3 game for a while and it wasn't too slow. I was using a very low-res collision map, however.
You can use BitmapData.getColorBoundsRect. Determine which area of the map the player might collide with, copy that portion of the collision map into a separate bitmapdata, and call getColorBoundsRect to see if any of the affected area is black or white or whatever.
Be sure to leave a 1px border around the bitmapdata object that you are calling getColorBoundsRect on, because there's a bug in Flash where it won't return a rectangle if the topleft corner is the only pixel that is the chosen color.
Here's a stripped down version of the code I was using. colTester is the BitmapData object that is used as the staging area, and caveMap is the collision map.
public function collide(rect:Rectangle) {
// convert the rectangle's extents to collision map coordinates
var startx = int(Math.max(rect.left/32, 0))
var starty = int(Math.max(rect.top/32, 0))
var endx = int(Math.min(rect.right/32, 256))
var endy = int(Math.min(rect.bottom/32, 256))
if(startx == endx && starty == endy) {
// No need to be fancy if it's a single pixel
var m = caveMap.getPixel(startx, starty);
if(m == 0x00000000)
return true;
return false;
}
var src = new Rectangle(startx, starty, endx-startx+1, endy-starty+1);
colTester.fillRect(new Rectangle(0,0, 12, 12), 0xFFFFFFFF);
// Blit it at (1, 1), not (0,0) because of the bug
colTester.copyPixels(caveMap, src, new Point(1,1));
var r : Rectangle;
// Test for collision
r = colTester.getColorBoundsRect(0x00FFFFFF, 0x00000000);
if(r.width != 0) return true;
return false;
}