It's actually possible to prevent impersonation:
In theory all the generated keys are added to a public certificate transparancy log. Browsers should check that the key is there (but your http client library probably doesn't - and this is why these compromised keys are a problem).
Website owners should also check that there are no other certificates in there, and if they see an extra misissued certificate something went really wrong at a CA and that CA would probably lose all the credibility and trust.
Also when you request a certificate the CA doesn't get your private keys, so they can't reuse your cert.