Peter's right about getting away from such a heavy reliance on the PID function to correct for things you know. You have the makings of a reasonably snappy system here. You can very quickly swap power usage from the 'customer' load to the heater load. And you have an effectively closed system. You generate a fixed number of watts and EVERY watt has to go somewhere.
It always helps me when I think of control systems in human terms. And may best analogy is accelerator control when you drive. When I drive I tend to press the accelerator down farther the farther I am away from my desired speed. As I approach my desired speed I gradually back off the accelerator. This is proportional correction. As I get very close to my desired speed I make slow adjustments over time to finally get me to my desired speed. The longer it takes me to get to speed the farther I push dow. This is integral response. I don't use much derivative response now. But some day, when I buy my Lamborghini, I probably will need to add some of that too. But now my favorite. If I come up to a hill I don't wait for the speedometer to tell me I'm coming off speed. I know that if I ma going uphill I need to add accelerator. So I press down immediately without a look at the speedometer at all. I will ultimately look at the speedometer to stay on speed. But I know that because of the hill I need to accelerate. THAT is feed forward; a command given NOT because of error but JUST BECAUSE I know I need it base on experience or a model.
Peter mentioned disturbance rejection. Imagine you are only using the accelerator in a car; someone else is steering. You only have the speedometer to look at to keep on speed. However, as you start going up the hill your body tells you that you are going uphill; you just feel it. So you immediately press down on the accelerator regardless of what the speedometer said. That's disturbance rejection. You didn't know the load change was coming but as soon as you detected it you knew what was needed to counteract it without having to wait for the error.
First of all, you should take a little different approach as you spin your turbine up. By now you must have a pretty decent feel for how much load you need to send through the heaters to stabilize your turbine at any given water flow. Use that information as a bias. That is to say, you know that just because your water metering valve is open 'X' amount you need to send 'y' current to the heaters. So just send that command. There is no reason to let the PID function figure that out on it's own. You KNOW what is required. So just TELL the output what to do directly. This is the essence of feed forward. You simply generate the commands you know will be required anyway. Why wait for the error?
Next, like Peter said, if you have any capability to measure 'customer' power use that information to your advantage. A power meter will tell you directly what the 'customer' power consumption is. You may be able to get by with a current meter only if your voltage stays stable enough. If you subtract 'customer' power from your total power generation you get a value for the heater power. I am assuming these are standard resistance heaters, so you can say P = I^2R. You should be able to get a pretty close value for the number of amps each heater sees per volt of command. With those pieces of information you should be able to come up with a heater command value that quickly adjusts to the 'customer' load, and so far the PID isn't even involved. This is a disturbance rejection term.
Now you add your PID and you start tuning it to handle the small losses and errors you couldn't account for in you feed forward and disturbance rejection terms. But now the PID doesn't need to do so much to keep you on track, which makes the PID loop much easier to tune and still get acceptable results.
Good luck and keep us posted.
Keith