Sorry, but @rdlrt is right here, this is technically impossible in a decentralised blockchain system. Any 2FA is only possible to implement on the wallet level, not in the blockchain itself, so 2FA for a wallet only works in this particular wallet and only because its developers are specifically created the code that prohibits you from sending anything until it is confirmed by second verification. It will NOT work with a fake wallet, because the developers of this fake wallet do not put this special code in, and all they really need to do is to get your secret words. ANYONE with your secret words has full access to your wallet and all funds, no 2FA can stop this. 2FA only valuable when you have right wallet and you can be secure from someone getting access to it and also stealing your password.
To solve this in the way you are describing we need multisig, not 2FA. This is the mechanism that will require multiple wallets to sign the same transaction to move any funds. Then it might really prohibit fake wallets to withdraw any funds, BUT it will also not work if people are not careful enough and they can go to their second wallet and confirm the fake transaction created by fake wallet. The only real solution for this problem is to teach people to be EXTRA careful with their own money, and always try and maximally verify any information and any programs.
Anyways, the multisig is actually in plans and IS getting developed for Cardano, so some day it will work exactly as you describe it, it’s just not that easy as it might sound from outside. And it has nothing to do with 2FA, which only would work if Cardano were a single-server closed system, like an internet-bank. But it isn’t. Hope it helps )