Depends. It should be fine if you use tile sheets and bitmap holding.
Which I didn't , and it was naaaysty
But even with bitmap holding and sprite sheets, I've run into (extremer) cases where performance took a hit, (probably because you're still sending a lot of drawing calls, and allegro is building transforms for each al_draw_bitmap call on the backend). I think the ultimate optimization is making the tilemap one large ALLEGRO_VERTEX tile_map_prim, every tile being 2 triangles, and the texture is the tile atlas. That's my next pet project, really looking forward to trying that out.
I don't really see how a transform is any better than just clipping like I suggested. Using transforms for translation implies you're drawing everything unless you also handle not drawing around where the transform is (which needs you to keep track of the translation separately...)
Not separately, you can extract them from the transform. If your camera has a camera_width and camera_height, you can al_transform_coordinates() on camera_x, camera_y, camera_x+camera_width, and camera_y+camera_hight. That'll give you your clipping rectangle in world coordinates. If you then divide each coordinate by 16 (or whatever your tile size is), then you get the row/column of the tilemap.