You could use sort keys to achieve what you want. For example you could add to Message:
chatId: ID! @index(name: "messageByChatByUpdatedAt", sortKeyFields: ["updatedAt"])
Now you could query all messages from a day range (between two dates, or lets say all messages from the start of 2023), and they are returned to you sorted by updatedAt. One thing to note though is that at maximum 1mb of data will be returned with one Query. Search for "short key" in the docs: https://docs.amplify.aws/cli/graphql/data-modeling/#configure-a-secondary-index
@searchable in general is the most flexible option for data search and aggregation , but it can be quite expensive*. And the t2.small instance tend to crash from time to time , so you should not use that in production.