I have had some luck using Grinder. It is Java based but you can also write your scripts in Jython or Clojure.
You said that you would like to take advantage of your team's current Selenium scripts and expertise performance testing. You did not describe your regression test scripts, but you may want to reconsider whether they are appropriate. In particular, you should consider two issues: is Selenium appropriate for performance testing and are functional tests appropriate for performance testing?
First, as you may have realized, Selenium is a very resource-intensive way to induce load on a system. Let me quote from the first question in the Selenium Grid FAQ:
Q: Would you recommend using Selenium Grid for performance/Load testing?
A: Selenium Grid is not designed for performance and load testing [...]
The main reason for
this is that conducting performance/load testing with real browser is
a pretty bad idea as it is hard/expensive to scale the load and the
actual load is very inconsistent.
[...]
To simulate 200 concurrent users for instance, you would need 200
concurrent browsers with a load testing framework based on Selenium
Grid. Even if you use Firefox on Linux (so the most efficient setup)
you will probably need at least 10 machines to generate that kind of
load. Quite insane when JMeter/Grinder/httperf can generate the same
kind of load with a single machine.
Second, there is a tension between the needs of a functional test and a performance test. A functional test focuses on correct behavior under a variety of circumstances, including some that may happen rarely but which are important to the user's experience. A performance test focuses on how the system responds under expected loads. If your functional test does not model a typical user's workflow, it does not belong in the performance test. For example, it may be important to know that a page generates a nice error message when you enter a 2-digit phone number, but it is pointless to ask what happens when 100 users do that at the same time.
Even if a functional test does model typical user behavior, it may still be inappropriate for a performance test. Functional tests focus on processing a set of inputs and checking whether the results match their expected values. If a test involves a number of steps, it may also check intermediate results for diagnostic purposes. In my experience, performance tests dispense with all that checking because it slows down the performance test. (To be more precise, there may be a few threads that check expected vs. actual results but most of the threads just try to load down the system without worrying about correct results.)