Well those are exactly the same thing (it’s just much easier to manage using an RG, or custom state, as a variable, rather than using a nested ‘search for Users’ expression… but there is no difference between them).
but if I understand your question correctly (as in, your trying to only show a small number of the potentially thousands of users in this hierarchy), your best bet will be to switch to an external database, where you can do recursive queries directly on the database.
But, if that’s not an option, then you’ll probably have to use some list fields, or at least some joining tables, to establish the ‘hierarchy’s’ as distinct entities in your database.
One option is to store a list of all ‘upline’ referrers on the User (there will only be 4 at most), rather than the other way around, but it can get complicated to maintain, especially if the referrer of a User can change.