Z twojego postu można wywnioskować że jest to sortowanie po stronie bazy danych. Przemilczę czy ma to sens w taki sposób jaki zaprezentowałeś (sql injection itp.), a swoją odpowiedzią skupie się tylko na sortowaniu w bazie danych.
Ogólnie NIE ZALECA SIĘ sortowania przez jakiś random w zapytaniu SQL z powodu bardzo powolnego działania takiego algorytmu. Co można w takim razie zrobić? Otóż bardzo prostą sztuczkę w zależności od tego jak wyglądają wartości w PK twojej tabeli:
- PK Auto increment + brak dziur
* Sprawa najłatwiejsza bo pobierasz sobie minimum i maksimum wartości z kolumny, a później losujesz liczbę z tego przedziału i limit + offset w zapyaniu załatwi sprawę + order by na PK ASC.
- PK Auto increment + dziury
* Sprawa trochę trudniejsza bo musisz pobrać ilość elementów na bazie później z przedziału 0 - max wylosować liczbę i pobrać tak samo jak w poprzednim punkcie
- PK jest jakimś typem który się nie sortuje
* Nie da się bez RAND w bazie
- Widok zmaterializowany
* Baza nadal będzie miała problemy jednak dla klienta wyniki będą instant

Odpalasz w cronie o jakieś godzinie generowanie widoku zmaterializowanego który posortuje wyniki po RAND() w order by (Tutaj zadziała Ci paginacja)
*Uwaga w każdym z podanych sposobów tracisz możliwość stronicowania wyników. Jeśli chcesz zachować możliwość paginacji jesteś zmuszony zapisywać sobie ziarno z którego losowałeś elementy i na tej podstawie przesuwać wyniki w prawo.
Ogólnie nie polecam sortować losowo nigdy więcej z tym problemów niż zysku biznesowego.