So you already have flights booked into Milan? Where do you fly out?
Because I loved the Bernina Express when we finally got around to taking it (on our 5th trip to Switzerland) I am going to suggest:
Land in Milan, go directly to Venice, OR spend one night and travel to Venice the next day.
3-4 nights Venice.
Return to Milan by train and transfer there to the train to Varenna on Lake Como (one-hour trip). 2-3 nights Varenna.
Then continue north on the same train line to Tirano on the Swiss border. Transfer there to a Swiss train over the Bernina Express route. You can take a regional train or the special Bernina Express Panoramic train (costs more). It is a beautiful trip to the Engadine area in Switzerland. You can stop in Pontrresina for a night or two, or change trains and continue 10 minutes to the small village of Samedan. We had an apartment there which would be ideal for a family. It is above a bakery and the breakfast is delicious.
From Pontresina or Samedan, you can either (a) take the Glacier Express train via St. Moritz to Brig and head to the Berner Oberland from there, or (b) head north to Chur and transfer there to a train to Luzern, spending 2 nights there before heading to the Berner Oberland.
Only choose option a (the Glacier Express) if your son does well on long train rides. I suggest you break up the journey to the Berner Oberland with a night or two in the village of Kandersteg on the way.