Potresti scrivere qualcosa come
SELECT product.*, bottom_category.name, top_category.name
FROM product
LEFT JOIN bottom_category ON bottom_category.id = product.bottom_category_id
LEFT JOIN top_category ON top_category.id = bottom_category.top_category_id
ORDER BY top_category.id,bottom_category.id
Ma se hai tabelle davvero grandi, dimentica la terza forma normale e aggiungi i nomi per le categorie nella tabella dei prodotti. Ma solo se hai tavoli davvero grandi con categorie.
UPD Aggiungi ORDER BY