TM: i can only give some high level input here due to the lack of impl. knowledge. but here are my 2 cents and correct my assumptions if they are wrong.
As far as i understand, one of the bottle necks is the invocation of the BPEL pipeline for each record adding too much overhead.
if that is the case: why not grab N records/massages according to config from the queue and stick them into the pipeline at once?
that should be fairly easy to impl. but at the costs that all pipelets would need to actually process the given Id and not just do the first one -- not sure if that is everywhere the case...