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.
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).
There's probably a few projects on GitHub that convert the UTXO.