That is a lot of moving around, but since your itinerary includes Lugano here is one way to include the Glacier Express by a very scenic and interesting route. Use this map of the Swiss rail system, with the named scenic routes marked, to follow the route.
https://cdn-doc.myswissalps.com/docs/default-source/rail-network-maps/swisstravelpass.pdf?sfvrsn=7788603a_56
So Milan to Como to Lugano. From Lugano, take the Bernina Express bus plus train to St. Moritz. From St. Moritz, take the Glacier Express to Zermatt. Then proceed to Montreux. Take the Golden Panorama Express from Montreux to Interlaken Ost and transfer to Lauterbrunnen for your time there. From Interlaken, it is back on the Golden Pass route to Luzern. Then Bern and Zurich. Note that there is a quick way back to Zurich from Zermatt via the tunnel from Visp, like 3.5 hours from Zermatt to Zurich. The train stops in Bern, so if you want an overnight there it would be an hour less, just over two hours.
You would need to spend at least a night each in St. Moritz (or nearby Samedan or Pontresina) and Zermatt, as well as the cities you named. It is a lot to fit in.
Another way to do this would be to skip Lugano (or go there first from Milan) and go from Milan to Varenna on Lake Como. From Varenna you can ride the Italian train north to Tirano on the Swiss border, and pick up the train portion of the Bernina Express there. Ride it over the Alps to Pontresina or St. Moritz and proceed with the Glacier Express, etc. from there.
Edit: I agree with the above comments about the Glacier Express. It is a long day sitting on a train. Since you are going to the Berner Oberland, it doesn’t really add much to your Alps experience. But maybe you really want to see Zermatt, that does make a good stop in your itinerary due to the quick and easy access to Zurich.