Where to look for a bottleneck after elimitating CPU, memory, and disk
The execution plan and statistics IO will tell you everything you need to know about what is going on.

There are four places the SQL Server can bottleneck and you listed three of them.  Disk (logical and physical IO), RAM or CPU.  After that it's just crappy code that generates more logical IO than is actually needed.

With all those tuning hints in there you've probably got some code that needs to be cleaned up.  You need to look at the execution plan for the query (post it if you'd like) and see where the problems in your query are at.  You can see if the IO is logical (cache hits) or physical (disk hits) from looking at the output when set statistics io on is enabled.