We have managed to identify a major bottleneck in the search pages that allowed us to dramatically improve its performance.
The bottleneck surprisingly enough was caused by how we calculate the product prices before showing them on screen. It turns out that a product price was being calculated upwards of 100 times per page-load on the search page due to various checks that need to be performed.
We now opted to store a `possibleMinimumPrice` and `possibleMaximumPrice` for each product (this also takes into account variants). This way we can use these approximated values to work out all the search filters.
All put together, we've managed to cut down the load time of an average search page to 1/6 of it's original loading times.