Frank, it becomes obvious you haven't worked with listbuilder before :). Listbuilder's pagination query is using "limit" to limit the number of object id's that are returned. So you are *not* checking permissions for all items even those you are not displaying in the first place. A snippet from list-procs-postgresql.xql:
<fullquery name="template::list::prepare.pagination_query">
<querytext>
$list_properties(page_query_substed) offset [expr $first_row - 1]
limit [expr $last_row - $first_row + 1]
</querytext>
</fullquery>
And therefore the Listbuilder Approach is in my opinion more flexible than yours, but who am I to argue 😊.