How important are intersections for non-existent categories? Without we could have something like (page_id int, cat_intersect bigint) or (page_id int, cat1 int, cat2 int) to get two cat intersection without collisions; and maybe even scale up by defining n-intersections recursively, without collisions.
How fast are ANDs in SELECT WHEREs? I would guess it's quicker to search by hash than by 2 ints.