Could you not do separate followedBy and then perform a join on the resulting alert stream.
Pattern p1= followedBy(/*1st*/)
Pattern p2= followedBy(/*1st*/)
DataStream alertStream1 = CEP.pattern(keyedDs, p1)
DataStream alertStream2 = CEP.pattern(keyedDs, p2)
Then just join the two alertStream's using a keyBy (some common key in the Alert events) on Event Time, only emit the ones with alerts from both sides if and'ing and either side if or'ing. Or another CEP operation on the two Alert Streams after keying by on something common in the alert events. Or if you just union the two streams and apply CEP on the resulting stream.
The pattern you mentioned seems only possible if each pattern works on separate keys but you still want to decide if two separate keys produced an alert.
Sameer