Something like webauthn that ties the token to the usage context and so addresses phishing (until the host security is broken) and also addresses non-interactive attacks is clearly better from that perspective, but it's not as easy to setup two of those as it is to setup TOTP on two devices at the same time or be able to put your SIM in another phone or get a new SIM (this is, or course, a negative if someone else gets a new SIM for your number). And then there's the extra cost (until/unless it's more integrated into devices people already have)