First off, if the MDB are not perfoming any blocking opperations (ie doing noops) then it would make sense that MDB1 would perform better as you have fewer context switches and therefore a lower overhead to process the messages.
Now if your processing has a blocking operation like lets say Thread.sleep(100);, then MDB2 should perform better as it should be able to do more concurrent Thread.sleep() operations.
And NO, the order of message delivery is not a bug!!!!
That is the price you pay for having multiple concurrent threads sending messages to the MDB!
The JMS Spec states that message order cannot be garanteed to a MDB. If you configure the pool to only 1 thread, you should get proper message order.