Я бы сделал в таблице top_used_emojis поле хранящее количество использования каждого пересечения user с emoji и повесил бы на это поле
DESC индекс а в Primary пихал бы поля user_id и emoji вместе.
На таблицу chat_messages повесил бы тригеры для пересчета количества в top_used_emojis
Ну и выводил бы это простым ORDER BY по индексу с лимитом