Manchester United and Villarreal will face off in the Europa League final after completing respective last-four wins over Roma and Arsenal on Thursday.
United went through to the May 26 showdown in Gdansk 8-5 on aggregate despite a 3-2 defeat in Rome.
United extinguished any faint hope of a turnaround in the Italian capital when Cavani extended their lead (39) but quickfire second-half goals from Edin Dzeko (57) and Bryan Cristante (60) put Roma in front.
Cavani notched his second of the night with a trademark header (68) before 19-year-old Nicola Zalewski settled the game on the night to cap an entertaining second leg – but United progress to their eighth European final.
Meanwhile, Villarreal held on to their 2-1 first-leg lead to get past the Gunners at the Emirates Stadium.
The Spanish side protected their first-leg advantage with a disciplined display, riding their luck at times with Pierre-Emerick Aubameyang twice hitting the post for the hosts.
Villarreal survived five minutes of stoppage time as Arsenal tried in vain to keep their season alive, celebrating wildly at the end as the club reached their first European final.
Villarreal take on Manchester United in the final in Gdansk later this month.