There is an interesting thread on the Catalyst mailing list actually that discuss
That leads me to suggest that the controller is not the most appropriate place to store the code you are talking about.
So now coming back to the code itself, on the sql side I think a join on the same table (with aliases) would be more appropriate ... so that leads as fmerges suggested to implementing joins in DBIC which is supported.