Filtering categories based on original query

I’m pretty sure this is rather common question, but I’m not able to search the solution in the documentation.

I have a list of products with 5 independent property/category (in real life one of these filters is keyword actually not a category) assigned for each item.
If a customer selects first category I’d like to update four other category select boxes to only display valid options, that means if a user will select any other additional option (to narrow search results even more) from these four he/she will get at least list a singe result.

I can do the same (original) query for each property and group the results by this property but that will be another 4 extra queries.
Is the any other more progressive way to get valid options for each filters?

If that’s easy to achieve next step could be to display a number of search results for each category option so a customer will know how much results he/she will get before selecting it.

I have approx 50.000 record in my database, with the biggest category having 1500 possible values.

Thank you, Roman

both issues resolved with facets feature, thanks