Thanks for the suggestions but, ...
well I'll just have to eat crow on this one :blush:
Turns out I had my timing code in the wrong place in the CLR, leading to the mistaken conclusion that SqlBulkCopy sucks.
I was WRONG. SqlBulkCopy never registers above 0.2 milliseconds, and more frequently its 0.03 milliseconds.
The thing taking the time is sorting a DataTable in .NET the larger the table gets, the exponentially longer the sort takes. Haven't figured a workaround yet, but just letting you know SqlBulkCopy is off the hook.