I'm 3/4 of the way through the game on Legendary and like always it can be brutal at times, but it is the most fun you can have with the single-player game if you have the patience. Some sections are extremely tough and can lead to frustration, but you get a huge sense of accomplishment once you pass them.
Halo plays a completely different game on Legendary. If you do not have cover or aren't proficient at getting quick head-shots, a small platoon of Grunts can kill you. Your shields are fully depleted after just a few hits of an energy weapon and one melee hit from an Elite will take you out. You have to plan your battles ahead of time and try different strategies when one fails.
One thing I really enjoy about Legendary difficulty is that it really makes you manage your weapons, ammo, and you need to plan ahead of your current battle. You'll often find yourself scavenging the battlefield for weapons, grenades, and mixing it up out of necessity. It is much harder to stick with your favorite weapon the entire time, because chances are you are going to run out of ammo (I absolutely LOVE the DMR btw, my favorite weapon of the series). As an example, on Heroic I rarely used the traditional Covenant plasma pistol. I never had a need to. On Legendary, with Elites having such powerful shields, the combination of a charged plasma shot to fully deplete shields followed quickly by a ballistic shot to the head, has become almost mandatory. I've always found this particular combination satisfying to pull off, and it is one I practically did without during my entire Heroic run.
So far Legendary is once again the way to go. I wouldn't recommend someone attempting it on their very first play through, since it can lead to moments of frustration, but in the overall fun department, when it shines, it takes the cake.
Once I'm done with Legendary, I hope to dedicate some time to Firefight. I've also played about 4 -5 online matches and they've been standard Halo. I'm not hooked on it, but it is a nice diversion from the single-player when I need a break.