Pearce set up first-half tries to Aidan Guerra and Anthony Minichello for a 12-10 lead at the break, before scoring a try of his own with 20 minutes to go in the second half to give the Roosters a match-winning eight-point lead.
Dragons and NSW prop Mick Weyman was the catalyst for the tight finish, scoring an unlikely try to bring the home side within two points 15 minutes from time.
Weyman took the ball from dummy-half and burrowed his way past Minichiello and Mitch Aubusson to score, but then came up with an error from the kick-off which allowed the Roosters another excellent opportunity.
Creagh had opened the scoring for the Dragons in the 12th minute, capitalising on a beautiful dummy-half run by hooker Mitch Rein, who had split some flimsy ruck defence to give Creagh a simple run to the tryline.
A cross-field kick in the 20th minute was fumbled by Dragons skipper Ben Hornby, allowing Guerra to pounce on the ball in the in-goal area and put the Roosters on the scoreboard.
The Roosters dominated the rest of the half, camping themselves on the Dragons tryline from the 25th to 30th minute without reward due to some exceptional goalline defence.
When Matt Cooper scored a try against the run of play - from a Hornby kick - it seemed a cruel blow after the Roosters' dominance, but Pearce helped them back in front with a bomb for Minichiello's try in the 34th minute.
A record crowd of 40,164 fans turned up to watch the contest, the highest number of fans at the annual fixture since it started in 2002.
The Dragons played with a man down for 60 minutes of the game, with representative back-rower Beau Scott forced from the field with a dislocated elbow.
Hornby converted the final try, in his record-breaking 257th game for the Dragons.
-AAP