The Luton striker added his name to the score sheet with four minutes remaining as Mick McCarthy’s under-studies finally made the pressure tell with a late surge.
Alan Browne and Kevin Long had both earlier scored first senior goals for their country either side of Ivelin Popov’s 66th-minute penalty as Ireland hit three in a game for the first time since they beat Uruguay by the same score in June 2017.
There was an impressive debut from Charlton midfielder Josh Cullen, while Alan Judge and Browne got minutes into their legs on the international stage ahead of next month’s tricky Euro 2020 double-header in Georgia and Switzerland.
McCarthy, who is now unbeaten in six games since launching his second spell in charge, will have to make at least one change in Tbilisi with full-back Enda Stevens suspended, although it is unlikely that anything he saw on Tuesday evening will present him with genuine selection dilemmas.
He was as good as his word after promising to test the depth of his squad, making 10 changes from the side which drew 1-1 with the Swiss on Thursday evening, in the process handing senior debuts to 20-year-old Bournemouth keeper Mark Travers and Cullen.
Opposite number Krasimir Balakov gave a first international appearance to 37-year-old keeper Hristo Ivanov as he made nine changes to the team beaten 4-0 by England on Saturday, and he very nearly had two clearances charged down twice by striker Scott Hogan inside the opening five minutes.
Nevertheless, it was the visitors who twice threatened from set-pieces during the early exchanges, Georgi Pashov forcing a regulation save from Travers and fellow defender Kristian Dimitrov heading over, both from Nikolay Dimitrov corners.
Judge cleared Ivanov’s crossbar with a header and then saw the keeper claim his deflected shot after good work by Hogan, Callum O’Dowda and Cyrus Christie, but despite their dominance in the middle of the pitch, McCarthy’s men were struggling to create meaningful openings.
Cullen chased back to make a vital block and deny Daniel Mladenov after he broke clear 12 minutes before the break and Ronan Curtis drilled wide from distance at the other end eight minutes later.
However, Hogan only just failed to get a foot to the Portsmouth midfielder’s cross on the stroke of half-time with Ivanov grateful to field the ball at the second attempt to preserve his clean sheet.
With Browne sitting noticeably deeper at the start of the second half, Ireland pinned the visitors back deep inside their own half, but repeatedly squandered promising positions with poor final balls.
Bulgaria responded and had skipper John Egan not been in the right place at the right time, Mladenov might have opened the scoring after controlling Ivan Goranov’s pull-back and blasting against the defender’s legs on the turn.
But it was the Republic who took the lead with 56 minutes gone when Ivanov’s night took a turn for the worse when he spilled Curtis’ dipping shot and Hogan fed the ball across goal for Browne to score.
McCarthy swiftly handed first caps to Jack Byrne and Collins as Judge and Hogan made way, and the Shamrock Rovers midfielder whistled a 65th-minute shot wide.
However, Bulgaria were handed a way back into the game with 24 minutes remaining when full-back Christie gifted possession to Goranov and he fed striker Bozhidar Kraev, who was tripped by Egan and Popov duly obliged from the spot.
Their joy too was short-lived as Ireland got themselves out of jail when Long powered home Byrne’s 83rd-minute corner and Collins converted fellow substitute Steven’s cross three minutes later to win it.