this was already followed and should still be in cache, it is unlikely the cpu would need to follow it again.
So no, there is still not an extra layer of indirection.
Allocating is an example, and no, it does not always take the vtable; It takes advantage of the interfaces built in buffering logic to handle the simple case where there is already available capacity.
Other examples would include the TLS implementations, also the (de)compression implementations.
This is not to say there is no merit to your alternative design, it would help alleviate the common foot-gun of copying the interface (and using it after).