What you say about dynamic dispatch also applies to regular function calls, which is why I'm disappointed that Zig provides no visible distinction at the call site between direct and indirect calls (as K&R C did but ANSI C made optional).
I understand the desire for magic-indirection ergonomics; I just don't think the tradeoffs work out the same for code vs data.