The easiest way to do this in 2.3 or later is probably with tags. Categories are pretty limited. I’m not sure if it is due to bugs or design.
For example:
cat=1,2
Will show everything from category 1 and 2 (Union).
cat=1+2
Fails.
cat=1&tag=2-bedroom
Fails.
tag=2-bedroom,1-bathroom
Works. Shows everything tagged 2-bedroom or 1-bathroom (Union).
tag=2-bedroom+1-bathroom
Works. Shows everything tagged with both 2-bedroom and 1-bathroom (intersection).
You will have to do some coding but it will be pretty easy to create a form where the user can select check boxes to create a tag intersection query. You can do it all in php/html.