• 1) I would turn off hyperthreading. it is more often suboptimal than helpful for sql server workloads

    2) your disk metrics are not as good as you think. 10 ms is suboptimal for log writes. Also, those numbers are aggregate. what you need to do is get sql server file IO stall analysis done WHILE the query is running. See sys.dm_io_virtual_file_stats and do a differential query. Oh, does the result come back instantaneously if you run the query twice in a row (i.e. hit the data after it is in cache)?

    3) didn't notice, but have you checked for table fragmentation? os file fragmentation?

    4) I would have said networking is a problem until you stated you got same metrics running the query directly on the server.

    5) is the new machine virtualized by any chance?

    6) do a waitstats analysis just like you do the IO stall analysis while the query is running.

    7) obvious question, but are the tables EXACTLY the same between the old and new system?

    Best,
    Kevin G. Boles
    SQL Server Consultant
    SQL MVP 2007-2012
    TheSQLGuru on googles mail service