Самое правильное решение - указать в
ChatMessage, что эта модель
touches Chat и сортировать чаты по
updated_at.
Если ваши чаты можно как-то редактировать (т.е.
updated_at зависит не только от сообщений), то можно завести дополнительную колонку для
Chat и обновлять её при каждом сообщении.
Всё это будет намного проще, чем джойнить сообщения и получать дату последнего.