1. ok to wolno faktycznie
2. LIKE stosujemy do ciągów znakowych a '1' to normalna liczba 1 więc tu powinno być pole typu INT (jeśli to flaga 0 lub 1) to nawet TINYINT(1)
3. Na polach, które używasz w WHERE powinno być ustawione w tabeli INDEX
4. Odpalałeś to pewnie parę razy pod rząd a zapytania są cache'owane spróbuj:
SELECT ogl_id, ogl_tytul, ogl_kategoria, ogl_aktywne, ogl_ilzdj, ogl_defzdj,ogl_tresc FROM _o_ogloszenia
WHERE ogl_aktywne LIKE '1' AND ogl_promowane_1 LIKE '1' AND ogl_id = (SELECT NO_SQL_CACHE FLOOR(RAND()*(SELECT MAX(ogl_id) FROM _o_ogloszenia))) LIMIT 5;
a jak nie zadziała jak należy to to:
SELECT NO_SQL_CACHE ogl_id, ogl_tytul, ogl_kategoria, ogl_aktywne, ogl_ilzdj, ogl_defzdj,ogl_tresc FROM _o_ogloszenia
WHERE ogl_aktywne LIKE '1' AND ogl_promowane_1 LIKE '1' AND ogl_id = (SELECT NO_SQL_CACHE FLOOR(RAND()*(SELECT MAX(ogl_id) FROM _o_ogloszenia))) LIMIT 5;
HTH