The best way to do would be to convert the actual Bitcoin UTXO database into a SQL database so you can search it.
This database is kept on every node but it is a LevelDB database that can only be accessed sequentially.
So you need a translation software to read it.
I made one myself in Java. It takes about 1 hour to convert the full UTXO to a MYSQL database. It's about 24GB large when only a few fields are saved (addresses, balance, block height, txid). It contains 162 million records as of today.
For OP's purpose, he doesn't need all UTXOs, only the balances. There are only
51 million addresses, so you could reduce the size of your database to 8 GB.
You can then do a quick search to see if a specific address is in the database.
If found you can easily calculate the balance by doing a select count(*).
Running the queries would need a pc with a very fast random access SSD and as much ram as you can spare (think 128 or 256GB).
How fast can you check a million addresses from this database?