Joins werken inderdaad handig, maar als er veel records zijn kan dit ook tegen je gaan werken omdat de join ook eerst in je server cache zal worden opgebouwd. Als het om grote aantallen records gaat is sphinxx search ook wel interessant. Je draait elke nacht dan een cron die een index maakt van je DB. Via php/oop kan je dan je in die index laten zoeken wat rete snel is en je server belasting minimaal. Dan maken die extra qeuries niks uit.
Maar je hebt ook wel linux kennis nodig om dit te instaleren.

Ik heb dit gedaan op een website met 13.000.000 producten en 1000den bezoekers per dag en de performance was super.
Draaide maar op 1 server.