Good thing you’re doing: creating new ads and not editing existing ones. Coming from a database background and knowing how Google handles editing, you don’t want to lose versions and data of ads.
I once managed an account with over 50,000 ad groups (mirrored in Bing too). To create these, I needed a few things from the client and luckily he had them. He had the product’s name and URL. As these were parts for air compressors, I also needed the make and model. I created routines to build the keywords from the make, model and part name. I did the same for ad titles (these were the original style text ads, pre-expanded and of course pre-responsive) using the part name, make and model and a generic description line. Each group had two ads and I had a few different description lines and had the app randomly choose them so that not all groups had the same ads and this allowed to test many different ad ideas. All this to create a CVS file that Adwords Editor could read in, once I manually checked the file for potential errors. Once done, just click to upload to the live account. I did this by part type, the filters for instance and then the regulators, pressure switch, etc.
Seems you would have to do something similar given the size, although I don’t like generic ads for every product you carry, but you don’t have much choice, doing it manually would take too much time. Once the campaign starts, check for the highest volume groups and test new ads that would be more specific.
Another thing that can help is setting a label on ads. For instance, Christmas for Christmas ads and when that sale is over, you can easily search for ads with this label in the Editor and pause them all at once. Or un-pause them next year.