Calls to polymorphic messages piggyback on the decision made at construction time. Thus, sans-OO you have to remake the decision for every operation. Writing the decision making code is potentially error-prone and is quite likely the cause of many bugs. So you have to make n decisions for n polymorphic operations.
But that assumes that the world devides nicely up into a single "subtype" taxonomy. Often it does not. Subtypes are a poor approximation of reality, and you cannot compile the entire world. Sets would be a better fit to the real world. OO made a mistake by allying much closer to trees than to sets. Further, in Smalltalk and the like such dispatching is still made at run-time.