Our internal solution is quite similar to wouters solution. The big differences are that we use "ArraySubset" instead of "DeleteSubset" and that we reuse the incoming search array to store the result.
I have not bechmarked it against the other solutions, so I don't know if it is faster or slower.
/J