An Ian Morgan penalty in the second minute put Cornwall ahead shortly before the match stopped for eight minutes while injured Gloucestershire back-rower Jack Preece was carried off unconscious. Four minutes later Gadd, making his senior county debut, skipped through a non-existent defence for the opening try.
Tim Stevenson converted then added the extras to Gadd's second try seven minutes later, the Bristol centre capitalising on Stevenson's break to slip out of three tackles and score close to the posts.
With Gloucestershire 14-3 ahead after twelve minutes of actual playing time Cornwall were staring a comprehensive defeat in the face. When Lydney full-back Martin Knight gathered a deft kick ahead and brushed aside a feeble tackle to score the third Gloucestershire try the visitors seemed to have already booked their place in the final at Twickenham.
Morgan kicked a second penalty for Cornwall before Nev Codlin rounded off a glorious Chris Holder break to score Gloucestershire's fourth try. Stevenson missed his first kick at goal but Gloucestershire were 26-6 ahead. Seconds before halftime, Cornwall No.8 Mark Bright scored a try from a scrum five metres from the visitors line, which Josh Matavesi converted to see the score 26-13 at the interval.
Within two minutes of the restart Gloucestershire extended their lead when Codlin raced in for his second try after his forwards had driven into Hell-Fire Corner and the ball was moved quickly across the three-quarters, the Cinderford wing scoring Gloucestershire's fifth try.
Trailing 31-13, Cornwall got back into the game and monopolised territory and possession, but the Gloucestershire defence repelled wave after wave of attack. Chris Holder was yellow-carded and with the player advantage Bright drove over for his second try, Matavesi converting.
Cornish tails were up and they began to stretch the Gloucestershire defence. Gadd and Gavin Curry produced try-saving tackles but the inevitable Cornish score came through centre Palo Nono three minutes from full-time. Replacement Paul Thirlby converted to put Cornwall a converted try from victory.
From the restart Gloucestershire took play into the Cornwall '22'. After a series of scrums Gavin Curry drove over but the referee was unsighted and disallowed the try. A minute later, in injury time, Tim Brocket drove through the Cornwall pack and touched down but the referee ruled him held up.
Gloucestershire were penalised at the next scrum but rather than running the ball Cornwall kicked for touch and the match ended with a massive sigh of relief from all Gloucestershire players and supporters.
Gloucestershire now look forward to a repeat of last season's County Championship Final with Lancashire at Twickenham next Sunday, this time hoping to go one step further and lift the Bill Beaumont Cup.
Cornwall: tries - Mark Bright (2), Palo Nono; conversions - Josh Matavesi (2), Paul Thirlby; penalties - Ian Morgan (2)
Gloucestershire: tries - Jack Gadd (2), Nev Codlin (2), Martin Knight; conversions - Tim Stevenson (3)
Josh Matavesi (Exeter); Rob Thirlby (Moseley), Ryan Westren (Launceston), Palo Nono (Camborne), Craig Bonds (Redruth); Ian Morgan (St Ives), Mark Richards (Redruth) (c); Darren Jacques (Redruth), Owen Hambly (Redruth), Ashley Morcom (Newquay Hornets), Luke Collins (Unattached), Damien Cook (Redruth), Mike Rawlings (Launceston), Tom Rawlings (Launceston), Mark Bright (Redruth).
Replacements: Lewis Webb (Launceston) for Morgan, Ton Knotman (Camborne) for R Thirlby, Ben Hilton (Launceston) for Collins, Danny Clackworthy (Hayle) for Morcom, Paul Thirlby (Redruth) for Richards, Josh Lord (Launceston) for T Rawlings
Martin Knight (Lydney); Chris Holder (Lydney), Chris Ashwin (Bristol), Jack Gadd (Bristol), Nev Codlin (Cinderford); Tin Stevenson (Cinderford), Tom Richardson (Stourbridge); Tim Brocket (Dings Crusaders), Paul Finken (Newbury) (c), Chas Meddick (Dings Crusaders), Danny Hodge (Newbury), Royce Cadman (Hartpury College), Dan Williams (Gloucester), Jack Preece (Birmingham & Solihull), Gavin Curry (Dings Crusaders).
Replacements: Danny Trigg (Cinderford) for Knight, Orlando Stott (Dings Crusaders) for Holder, Steve Plummer (Dings Crusaders) for Richardson, Barney Purbrook (Clifton) for Meddick, Sam Wilkes (Clifton) for Finken, Ed King (Cinderford) for Hodge, Marcus Brown (Cinderford) for Preece
Yellow Card - Chris Holder (55 - 66)
Referee: Llyr Ap Geraint Roberts