Tornado is a straight up money laundering (specifically, layering [1]) service. Monero can be that. But it's also other things, which makes it at the very least defensible in a way someone interacting with Tornado is not.
[1] https://www.stpaulschambers.com/stages-of-money-laundering-e...
Funnily enough, Congress already passed a mandatory kill switch law for automobile manufacturers. Supposedly for stopping drunk drivers. You already know it'll be used for any purpose the police see fit. Once they have the ability, there's no reason not to.
Privacy is not a crime, and money laundering doesn't mean obtaining financial privacy.
It's the tech they they haven't backdoored that poses a threat to their surveillance/control model. Tech like Tornado.
Zcash is good, but not popular. Same for zk.money
There's no possible attack to deanonymize the full zero-knowledge model beyond the utilization of always existing metadata - which needs separate solutions for every such system. In practice, zcash doesn't have that many users, so the anonymity set isn't big, but that's a separate issue to technology.
The question which one is better in practice right now is a more complex one. Even a perfect solution like zcash/zk.money is useless if (just a random number) only 3 people use it, and ringct with (again a random number) 100k separate people with roughly equal tx count would obviously win. My estimate is that tornado.cash is the most anonymous. Monero is hard to estimate because there's no way to know how many spent outputs are known to the American government and/or cooperating chain analysis companies. Is it <1%? Then it's probably second best. Is it 90%? Run away.
Last but not least monero can be deanonymized retroactively by quantum computers. Tornado, zk.money and zcash can't - they can be robbed (monero can be robbed too, obviously) but that's a much better failure mode.