The 22-year-old Yorkshireman, who controversially replaced Kevin Pietersen for the crucial final Test with England having to win it to retain their status as the top-ranked Test side in the world, came to the crease with his side at 54 for four and led the hosts to 20 for five at the close of play.
England took the final three South Africa wickets in the morning session with number eight Vernon Philander finishing with an unlikely 61, but captain Andrew Strauss – appearing in his 100th Test match and 50th as captain – fell on the stroke of lunch.
Jonathan Trott, Alastair Cook and James Taylor all swiftly followed, and it was left to Ian Bell – who scored 58 – and Bairstow to rebuild under real pressure in a significant stand of 124 to thwart the tourists.
England trail by 101 runs with five first-innings wickets remaining, knowing that they must impose themselves on the Test with South Africa holding a 1-0 lead in the three-match series and aiming to usurp their hosts at the top of the world rankings.
England hit trouble against the potent pace duo of Dale Steyn and Morne Morkel in the afternoon session, faltering to 54 for four - the exact position of vulnerability South Africa found themselves in, early on Thursday.
Strauss was bowled through the gate by Morkel just when it seemed he and Cook had given their team a sound start. Morkel has now proved Strauss's downfall eight times in 11 Tests.
There was also a familiar ring to Jonathan Trott's dismissal - the first of two in four balls for Steyn. This time, he was out via DRS, after Kumar Dharmasena initially gave him a reprieve, before Cook’s increasingly uncomfortable and unconvincing stay ended when he chased a push-drive and edged to second slip.
England had lost their top three for just 10 runs either side of lunch and suddenly it looked a long way back into contention.
James Taylor, playing in only his second Test, edged a shorter, quicker ball from Morkel to Smith at first slip - leaving Bell and Bairstow under extreme pressure against an unrelenting seam attack.
Bairstow required 13 balls to get off the mark, with a single, and an ultra-watchful Bell took 41 deliveries to reach double-figures with a clip to midwicket for his first four in the same Kallis over, but eventually the pair began to assert themselves and look more fluent.
The pair consolidated with distinction as they put on 124 in what proved to be a partnership that left the tourists frustrated after their early flurry of wickets had given them the ascendancy.
Bell eventually succumbed to the impeccable bowling of Philander, with Alviro Petersen taking a smart catch in the slips as Matt Prior, who was left on 22 not out, joined the unflappable Bairstow to help the hosts to stumps without further loss.
England's bowlers had encountered continued resistance in the first hour this morning, as Philander, in particular, made them work hard. He completed his maiden Test half-century before he ran out of partners, having resumed with 46 to his name already, and Steyn and Morkel helped him take South Africa past 300.
By the time Philander himself was stumped off Graeme Swann, as he tried to bag more bonus runs alongside number 11 Imran Tahir, the tourists' last six wickets had realised 255 runs.
The match looks likely to be very evenly poised heading into the second innings with both sides determined to attack and to seize the initiative once more.
With a deficit of 101 runs at the close of play, England will be determined to at least ensure parity after the first innings, and Bairstow is just 28 runs shy of what would be a quite brilliant maiden Test century.
- Vernon Philander
- Jonathan Trott
- Alastair Cook
- South Africa
- Andrew Strauss