The “code exists” check is just the EL clients checking in their data store—there’s no global Merkle proof for “this code hash exists somewhere.” Therefore, we need another mechanism of storing all unique code hashes, which in itself is a separate EIP.
Regarding the duplicate bytecode discount in the same block, it’s unfair for the first deployment (see the full pros and cons) so I’d prefer the system contracts method.