Something that is hard to remember sometimes: designate 'Travel Days', ie days that you check out of one hotel, drive to next city, and check into next hotel. If you don't take these travel days into account your trip is all about traveling and not enough about enjoying where you are.
Drop Zermatt, of course. When you read 'Zermatt' think New Orleans, Bourbon Street, Friday night, but with fondue and the Matterhorn in the background as you walk, shoulder-to-shoulder through the streets. If you still want to do Zermatt then do Saas Fee instead. You turn left at the split to go to either Zermatt or Saas Fee and travel down the entire Saastal. Fewer people, parking right at Saas Fee (Saas Fee is pedestrian only as well). Same area, basically the same mountains. Stay at Weissmieshuette or the ski hut above it.
Drop another destination (probably Milan, leave directly from the airport for Chamonix, that saves a day). Maybe St. Moritz? Take the extra days and make sure that you have enough travel days between locations and enough time in each place to make it worth it. Is there any reason that you plan to fly into Milan and not ZRH (I am partial)?
I have never been in October but many of the huts that I frequent, which would be at the higher altitudes of your trip, close about September 20-30 for the season. Sometimes they are literally taking the outside tables apart and packing them up while we are hiking away!
Bon voyage! and remember to count travel days ;)