I'm sceptical of your claim. Google Adwords is the only source of this information (as we're talking about Google search numbers) therefore you're using browser automation to search for keywords and filtering them programatically.
My educated guess would be that you're using selenium (or something that closely resembles it) in order to interact with the AJAX that Google Adwords uses and then filtering the search numbers column to store keywords with > 5000 searches.
If you were to use a dictionary and download a spreadsheet from Adwords for every word in that dictionary and putting the bandwidth, time, proxies (likely), account creations aside...you would have X number of search terms. Those X number of search terms are a tiny fraction of the search terms out there as the search terms that you're able to download are capped (at 5,000 I believe?). When we start talking combinations of terms you're looking at X^Y where Y represents the total number of words that can be used with X, the possibilities are almost infinite.
To further complicate this, most search terms are not in the dictionary, they're names of people, places, pop-culture topics.
I've no doubt you can get a lot of search terms with > 5000 but all of them I would say is near impossible unless you had direct access to Google's database and they gave you the resources to query it.