А зачем вы сразу все выдергиваете и везде? Если вы тупо дергаете все записи (если у вас ролей 2-3 штуки вообщем то все) из таблицы - то что вы подразумеваете под словом оптимизация? - базе данных так или иначе надо шерстить всю таблицу целиком.
Ну если у вас есть update_at, после этого запроса вы можете дернуть записи которые обновились в этот промежуток. +- будут обновленные записи. ну или сами регулировать updated_at и получать более точно