W twoim przypadku nie uciekniesz od dwóch zapytań.
najpierw selectem pobierasz posegregowane nazwy a następnie drugim zapytaniem listę posegregowaną według kategorii.
Jeśli nie chcesz zaorać bazy proponuje stworzyć trzecią tabelę cache_zapytania gdzie będziesz trzymał posegregowaną listę. O północy , kiedy ruch na stronie jest mały odpalisz update cache