Vous pourriez écrire quelque chose comme
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
Mais si vous avez de très grandes tables, oubliez simplement la 3e forme normale et ajoutez des noms de catégories dans la table des produits. Mais seulement si vous avez de très grandes tables avec des catégories.
UPD Ajouter ORDER BY