How to store data on the blockchain and query it?

If you’re willing to do a bit of cryptography, you can have the smart contract store a cryptographic hash (e.g., SHA256) of the list of bids. This way you can have the indexer gets all the bids (as @danger_dave explained) only once, and store all the bids inside any storage (e.g., AWS S3).
Then anyone can download the bids from the storage and check whether it matches the hash.
The person uploading the bids to the S3 bucket does not need to be trusted: if they cheat, the hash will be invalid.
(And if they cheat, you can always revert down to querying the indexer.)

To hash a list of bids, you can use the following process:

hash = SHA256(bid42 || SHA256(bid41 || SHA256(... || SHA256(bid1 || 0)))

Performance-wise, a usual computer can do at least 1M SHA256 hash of 64-byte values/s, so verification should take much less than one second.

Note: Maybe this solution is overkill and directly querying the indexer each time is good enough.