Using forall isn't so complicated. You can use the simplified form, where the condition to be satisfied is written in the pattern selecting the domain.
rule setPriority
when
$order: OrderType( priority != "high" )
forall ( OrderLineType( quantity > 2 ) from $order.lineItem )
then
modify( $order ){ setPriority( "high" ) }
System.out.println( "set to high" );
end
This illustrates very nicely the duality (by de Morgan's laws) between forall and negated existence.
As for efficiency: repeated evaluation of large lists where the elements aren't facts may slow you down - whether this is a problem depends on other factors.