Hi,
As Aaron said that is not exactly a beefy box, it sounds about equivalent to the server this site is running on which I would call a budget level dedicated server. 2000 requests per second on a box like that doesn't really sound too bad to me and a beefier box could go a lot higher.
I think if you are getting the same result when running the tests locally vs a remote machine making the requests, it just means that the remote machine is not able to put it under enough load to get higher because it surely takes a lot of processor to create the load just as it does for serving the requests. To really create the load the requesting machine or machines need to have a fast connection and usually need to be more powerful than the box they are load testing unless you have multiple machines creating the requests.
Output caching is something that can only really work well for a brochure kind of site, features that are designed for user interaction won't work well with that but if your content is only using the html feature you might be able to get away with it.
In mojoPortal some features such as the Html feature do support caching but you have to enable it by adding this to user.config
<add key="DisableContentCache" value="false"/>
and then you can set the cache duration in the feature settings of each Html instance.
We have it disabled by default because cache uses server memory and that is usually the most precious and limited resource of all in shared hosting and even budget servers. If the memory limit of the application pool is reached it recycles the app and therefore enabling caching in low memory environments can actually hurt performance rather than help it.
See also Capacity Planning
Hope that helps,
Joe