Malvern Hill is completely doable, and without heavy casualties.
The key for me is patience. I've played through it about four times now. My first attempts I rushed things, and took heavy casualties. On my last attempt, I moved much more slowly and carefully, and was rewarded with the above result. I spent half the battle working over the fortification on the Union far right with snipers and artillery - the snipers hidden in the woods in front of the eastern fort and the artillery positioned on the hills to the right of the Union position (along with some small cavalry and skirmisher units for protection and spotting). The rest of my attack forces were hidden in the woods further back.
The snipers and the artillery focus on Union artillery, with one goal - to kill it or drive it away from the eastern fort. Once that's done, you can hit the eastern fort with a series of brigades on a one-brigade front. Each attacking brigade gets into melee in the fort, and gets fire support from the brigade behind it. It took two waves for me to take the fort, and then the follow-up brigades push through into the Union rear.
At the same time, some brigades head to the far west, and position themselves to block the two fords without exposing themselves to fire from the hill. This will cause the Union to strip forces from the second defense line to face off against the units in the West. In combination with the sniper and artillery attacks on the eastern fort, you'll notice a general migration of Union forces to the left, which helps clear the way for your breakthrough.
When your reinforcements arrive, they form a line facing the Union left and center, but stay out of contact except for artillery, which should commence bombarding the Union blob that's building up on the left. Your breakthrough brigades form a north-south line, and then slowly move west to roll up the Union line. Your snipers can take up residence in the trees at the eastern fort, and you can eventually migrate artillery there so they can keep firing into the Union blob. Both snipers and artillery should focus artillery units, and infantry should target them as well whenever they can. Send cavalry through the hole and / or detach skirmishers to roam the Union rear, capture supply wagons, and take the two victory locations.
Eventually your breakthrough brigades will link up with your western forces, probably near the southern ford. At that point, the kill box is complete and you just move forward slowly, routing any unit that tries to stand or run and letting your artillery and snipers do their work. I can't emphasize enough that patience is important - the Union artillery left in the blob can sometimes just zap one of your units with canister if you get too close, and rout them out with heavy casualties. It was getting dark when I killed and captured the last Union units, with only one skirmisher on the far southeast edge of the map escaping.