We will be going to Northern Italy in late April/early May. We will be coming in to Italy from Switzerland on the Bernina express ending in Malon. The cities/places we would like to visit are Milan, Lake Como, Venice, Cinque Terre, Florence, Sienna (maybe a peak at the Dolomites). We will have 2-3 weeks. I know some of you would stay in some of these places for weeks, But we’d like to fit what we can in. We would most likely fly out of Florence, unless there is a better suggestion. What itinerary would you plan.
I would probably figure out which city is best to fly home from - Milan, Venice, or Florence. Sometimes one will have a better flight connection or much better fares or something. (I would avoid an early flight home out of Venice. This last May I flew home to PDX from Venice via Chicago on AA, with a nice late afternoon departure out of Venice.) But if you really don't care about that and just want the most optimal itinerary, then I'd map out all of these cities on a say a Google Map and look for the most logical way to connect them.
Obviously you'll be doing some back-tracking.
Some people are more flexible than others in sticking to an itinerary, but I'd suggest trying to be flexible based on the weather. This last trip I took, I had few hotels reserved in advance on a 10 day trip. I wanted to hike in the Italian Riviera and planned that around the rain I saw coming in the weather forecast. I'd rather have nice weather in the Cinque Terre and rain in Milan, Florence, and even Venice when I might be inside anyway in a museum. It's not too hard to find lodgings last minute if you have a phone, tablet, or laptop with you to make last-minute reservations. That's how I did it.
Check the best flights out of Europe back to your destination in the US and plan a linear trip from the Bernina Express to that point. I would expect that it will be Lake Como, Milan, through Florence without stopping to the Cinque Terre, back to Florence for your visit, down to Siena, back to Florence and off to Venice for the flight home. If you want to squeeze in the Dolomites, stop in Verona on the way between Florence and Venice and head north to Bolzano. Most of the Dolomites can be reached by local bus from the Bolzano main station for under 10 euros, but not very quickly.
Also look at flights out of Bologna. It's bigger than Florence so there may be more options. Milan would probably be best and you could plan a loop.
Use trenitalia.com for train routes and schedules. There's train srvice between Milan and Como, but you have to go back to Milan to get to Venice. Venice to Florence by train. You can day trip from Florence to Siena by bus. If you want to overnight there, you'll need to change trains to get to La Spezia and again to whichever village you're staying in. There are direct trains from Monterosso to Milan. If you don't return to Milan, you'll have to backtrack to Florence or Bologna.
So my route would be go right to Como, then spend as long as you want in Milan (1N would be enough for me), then Venice, Florence, Siena, CT, Milan for the flight out. Getting to the Dolomites will take the better part of a day in each direction, so you'll want at least 4 days, 2 of travel and 2 in the mountains to make it worthwhile. With 3 weeks, that would work, but with less, I wouldn't do it without dropping the CT, which also takes a lot of time to get to. Without the CT you could return to Milan from Florence.