It seems like Query Scopes would be one way to accomplish what you need.
For example:
class Avenger extends Eloquent
{
public function scopeCanFly($query)
{
$query->where('power_armor_sets_owned', '>', 0)
->orWhere('jetpacks_owned', '>', 0);
}
public function scopeAngrierThan($query, $minAngerLevel)
{
$query->where('anger_level', '>', $minAngerLevel);
}
}
And call it like so:
Avenger::canFly()->angierThan(5)->get();
EDIT:
After seeing your example, I'd probably use a repository class with a chainable filtering method, similar to a post I made earlier today here: https://laracasts.com/discuss/channels/general-discussion/how-to-create-a-laravel-restful-api-allowing-requests-with-url-params/replies/20919
Using that code, you could have a "count" method on your repository that would apply the filters and return the count, and then an "all" method that would apply the filters and return the paginated result:
$total = $avengersRepo->total();
$all = $avengersRepo->all();