I would take the train from Milan as far as Varenna on Lake Com0, a 1-hour journey. It is a lovely town and a nicer place to stay than Tirano, and the off-season prices will not be bad. We like Albergo Milano there, with lakefront rooms and a very good restaurant for dinner. The next day, continue to Tirano and connect with the Bernina train. We have done this is early October ourselves, although in the opposite direction.
Next day take the train to one of the Swiss villages just over the Bernina Pass—-Pontresina or Samedan would be my suggestion. Pontresina is a larger but still charming alpine village/ski resort. Samedan is so small it barely can be called a village, but there are lots of hotels. We like Hotel Garni Laager there; it is basically a bakery and cafe with four rooms upstairs (one of them is a nice apartment). The price is lower than many of the other hotels around, the welcome is warm and genuine, and the breakfast baked goods are the best around.
https://www.laagers.ch/
You could go on to Chur and overnight there if you like, or continue straight to Wengen. Chur to to Wengen is 4 hours and 3 or 4 minutes for most routes (you can trust SBB on this; I don’t know where you saw 12 hours but that must be by some circuitous route). Samedan to Wengen would be 5 hours 45 minutes to 6 hours; Pontresina to Wengen 6 to 6.5 hours. Those are all by the faster route via Bern; the slower scenic route via Luzern and Brienz is well worth it if you have the inclination.
Actually (thinking as I go here), I would recommend going from Pontresina (or Samedan) past Chur to Luzern for your overnight. This journey is 4 hours 23 minutes, and sets you up to take the scenic Brunig Pass route to Wengen the following day, instead of the faster Bern route. Wengen is just 2 hours 35 minutes from Luzern. Plus Luzern is a lovely lakeside town for your overnight.
In Wengen we like Hotel Baeren which has an excellent in-house restaurant—-half board here is well worth the price. It is a 2-star hotel, quite simple but clean, modern and friendly. The food is mostly locally sourced, as much as possible anyway. If you want 3 starts, Hotel Bellevue as mentioned above is a good recommendation.
My recommendation on a train pass is get a Swiss-only pass, like the Half Fare Card suggested above, or maybe a Flex Pass or multi-day Swiss Pass, depending on how much travel you will be doing and whether your plans include the pricy Jungfraujoch trip. (If you are doing this trip, the Half-Fare Card gives you the biggest reduction in price and almost pays for itself on this trip alone). You do not want a pass that includes Italy because (a) it will not give you as much benefit in Switzerland as a Swiss-only pass and (b) you can generally do better on Italian trains by purchasing them far enough in advance to get the super-economy fares.
For Rome to Florence and Florence to Milan, you can use either Trenitalia or the newer company Italo. I recommend the latter for the more user-friendly website. https://www.italotreno.it/en
From Milan to Tirano or Varenna, you will ride a regional train that is very inexpensive and does not offer advance-purchase discounts, so you can just buy this at the Milan train station (from the machines) before departure.