Good question. Maybe others know a better way, but in that case, I believe you need to loop through the row objects and delete them as you mentioned above, asfaik.
With SQL databases, a series of deletions (and/or other changes) tends to go much faster when it is wrapped in a transaction. That might be true here, too.
There’s currently no simple way to delete all rows returned by a search iterator. As @alcampopiano suggested, you need to loop through the rows to delete them.
Please feel free to create a Feature Request if it’s something you think would be helpful