I wonder what the best way to clean out these secrets are?
Just mine on top of the latest ASIC block. If the difficulty is equal to one million, then it means, that a single ASIC block can overwrite a chain of million CPU-mined blocks.
51% the network and invalidate them?
Technically, it won't be "51%", because CPU miners provide less than one millionth of the network hashrate, but they are mining around 80% of the blocks. If CPU miners would get the proper amount of coins, inside their coinbase transaction, instead of getting 50 tBTC in every block, then it would be better visible. But because test coins were assumed to be worthless, nobody cared about adjusting amounts properly. Also, in 2011, when testnet3 was created, the difference between the minimal difficulty, and the real difficulty, wasn't that high, so people didn't care (because it was just testnet, and 20-minute rule was just a little change).
Then move forward or I guess the problem would just repeated?
As long as all ASICs won't reject CPU-mined blocks, the network difficulty in block headers would be around 6x bigger, than the true difficulty is. Which means, that if in the last 2016 blocks, you have 336 ASIC blocks, and 1680 CPU blocks, then for example when you have difficulty of one million, you have the chainwork set to 336,001,680*2^32, for 2016 blocks. And without CPU-mined blocks, you would have 336,001,680*2^32/2,016=166,667.5*2^32 chainwork per block, instead of 1,000,000*2^32 chainwork per block. But: each and every CPU block moves things closer to 2016 target per two weeks, so the difficulty declared in block headers is artificially increased by that (so there is even less ASIC-mined blocks, and it would keep increasing into a single ASIC block per two weeks, but two hours rule, and Median Time Past rule, stops CPU miners from reaching that).