Python may not "support" multi-dispatch, but it has the flexibility necessary to add it in if you wanted it:
https://pypi.org/project/multipledispatch/ Other than not being built-in, that looks like it does everything you could ask for.
Aaaaand... this sort of doubles as a partial answer to the original question, too. When your language is that flexible, and doing all its flexibility at run time, yeah, it's pretty hard to optimize. As a product of its time, Python is a triumph, and don't mistake what I'm about to say for it being "bad" somehow, but if I were designing a language today, even a dynamically typed language, I wouldn't even begin to design it with all the run-time flexibility Python has. As neat as "adding multidispatch" is in some ways, the capabilities in the language that allows you to add that capability at runtime comes at a staggering, staggering performance cost that a good 15 years of fix attempts has only partially and incompletely addressed.
I have not used that Python multidispatch library, or even known it existed until I searched for it just now, but I'd lay money down that it imposes yet some further penalty to Python's already-expensive function call process. I don't think is was HN but I was just mentioning online the other day that dynamic scripting languages aren't just slow themselves, but also tend to encourage you to add yet more slow things on top of the already-slow things without necessarily thinking about the costs, and I'd bet this is a perfect example of what I mean. Yes, yes, very nice, very convenient, probably makes function calls another 5-10x slower than they already are. (I note the source package has benchmarks, and they are not mentioned in the README. I make the obvious inference.)
And to be clear, this is not a criticism of this package, which I'm sure is as nice as it can be within the constraints of Python. It looks very nice to me. No red flags I can see. Compliments to the author on the off chance they see this; I'm not targeting this package. It's just part of the answer to why Python is so slow with this stuff.