I note that you omitted: Dual layer caching, Lazy instantiation, Database/data source independence
I suspect the first 2 are something specific to an OO-centric design.
Dual layer caching refers to in-memory caching of database results. Lazy instantiation refers to only retrieving results as they are actually required.

The last one was already discussed. I doubt one can nicely put nearly all SQL behind an API.
Your doubts arise from ignorance.

And if possible, I doubt only OO can do it well.
Weaseling again. Your statement, once more: "You spend all your code translating back and forth between two discordant paradigms."

Where's the bloat?

Still waiting...