Giulio Migliaccio and a Cesare Bovo penalty gave the Sicilians a 2-1 win on the night in the semi-final, second leg and 4-3 aggregate success following a 2-2 draw in Milan three weeks ago.
Zlatan Ibrahimovic pulled a goal back for Milan deep into injury time.
Palermo will face either holders Inter Milan or Roma in the final on May 29, in what will be their third Cup final.
It was a remarkable turnaround for Palermo coach Delio Rossi, who was sacked in late February only to be reinstated five weeks later.
"I told the president (the controversial Maurizio Zamparini) that I would come back but first I had to talk to the team," explained Rossi.
"I told the lads that we had to roll up our sleeves and take Palermo to the heights.
"It's a great group built on good values, a historic group.
"Over the 180 minutes we deserved to go through."
Due to their league position, Palermo need to win the final to reach next season's Europa League.
Both sides finished the game with 10 men after the game exploded into life in a combustible second period.
Milan for their part looked jaded, as if they had spent too long celebrating their Serie A title success on Saturday night.
And coach Massimilano Allegri said he had nothing to reproach his players about.
"We had several chances, starting with Robinho after barely a minute," he said.
"Palermo played very well but we did well in getting to the last third and then we didn't manage to finish things off.
"Even so, I've got nothing to reproach the lads over."
In a tight first half of few chances, Robinho wasted a glorious early opportunity when left all alone only to shoot over.
Milan midfielder Mathieu Flamini was next to try his luck but from an impossibly tight angle with goalkeeper Salvatore Sirigu blocking at his near post.
Palermo's best chance in the opening period came on the quarter hour mark when playmaker Javier Pastore thrashed an effort high and wide.
Milan had another sight of goal five minutes after the restart but after digging the ball out from under his feet, Pato dragged his shot wide.
Palermo started to up the ante and took a deserved lead on 63 minutes after their pressure forced a corner.
Migliaccio made a determined run into the box and evaded his marker to plant a diving header into the bottom corner.
Allegri responded by bringing on star forward Ibrahimovic for midfield veteran Clarence Seedorf.
But their hopes of reaching the final suffered a fatal blow 17 minutes from time when hardman Dutch midfielder Mark van Bommel was sent off for bringing down Josip Ilicic when the Slovenian was clean through in the box.
Bovo made no mistake from the spot kick but TV replays suggested Ilicic needed no second invitation to go down as Van Bommel had barely tugged his shirt.
Palermo needed only to see out the remaining time but Bovo immediately wiped out their numerical advantage by getting himself sent off for a high boot that caught Pato in the face.
Allegri then threw on Antonio Cassano for centre-back Alessandro Nesta and played four up front.
And they were give a late lifeline when Ibrahimovic ran onto Cassano's deflected pass and clipped home four minutes into injury time but it was too little, too late.
What the stars mean:
★ Poor ★ ★ Promising ★★★ Good ★★★★ Very good ★★★★★ Exceptional