Daca bagi intr-un sql order by rand() nu il faci sa mearga mai repede, in cele mai multe cazuri dureaza mai mult sa se execute (depinde de tipul de date din tabel si de marimea acestuia.

Daca problema ta este viteza de executie inseamna ca problema e alta.

Spune-mi, te rog, ce tip sunt declarate campurile categorie si subcategorie, cate campuri are tabela si cate inregistrari.