It is common practice to use a second level cache and a request cache. Than your data will be read from memmory not from db.
Good article about it here.
Other things may be helpful:
1 Indexing - in case there is an order - you need to create indexes for the fields you are looking for / ordering - this can improve the search speed by 10 times
2 Denormalization - if you have many associations, some denormalization may help (putting only one table). But this should be the final decision when everything else does not work.
source share