I think the big win is that OO moves the decision point to object construction. At that point you have evaluated your criteria and made your decision.
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.
With OO, however, you only have one copy of the decision code and so you can do n operations with only 1 decision. I suspect this is a big part of the increased reliability in OO.