The duo broke away at the start and were locked in battle throughout the six-lap race.
A mistake by Todd at Mather’s chicane on the fourth lap allowed Johnston to open a gap of 1.4s, but Todd had closed the deficit by the time they reached University on lap five, hitting 180mph on his Milenco by Padgett’s Honda on the run to Coleraine.
Todd led through Metropole but a slight mistake at Black Hill allowed Johnston – who started from seventh on the grid – to get a run on him.
The British Supersport frontrunner went through on the brakes into Juniper chicane, holding on for his fifth victory overall at the event by 0.079s on the Ashcourt Racing Yamaha.
For Englishman Todd, it was his third runner-up result after he twice finished second in Thursday’s Supersport and Superstock races.
Michael Dunlop put his MD Racing Yamaha on the podium in third, 9.8s back, with DAO Racing Kawasaki’s Dean Harrison on his own in fourth.
Jamie Coward (KTS/Steadplan Yamaha) got the better of the impressive Joe Loughlin (Yamaha) for fifth.
Alastair Seeley, the winner of Thursday’s rain-hit race, was a retirement on the IFS Yamaha along with Ian Hutchinson (BPE/Russell Yamaha) and Adam McLean, who started from second place on the front row on the McAdoo Kawasaki, plus Conor Cummins (Milenco by Padgett’s Honda).
James Hillier crashed out unhurt at York corner on the OMG Yamaha.
Paul Jordan (PreZ Racing Yamaha) and Jeremy McWilliams on the Burrows Engineering/RK Racing Yamaha were the top eight.