Preheat the oven to 400 degrees F, and line a large baking sheet with aluminum foil. Set aside 2 cups of the butternut squash, then toss the remaining squash with the olive oil, 1/2 teaspoon salt and 1/4 teaspoon black pepper. Spread evenly on the baking sheet and roast for 20 minutes, stirring once during the process to prevent sticking.
While the butternut squash is roasting, steam the reserved squash until fork tender, approximately 10 minutes, then mash and set aside.
Prepare the macaroni according to package instructions, then drain and rinse in cold water to prevent sticking. Set aside.
Combine the cheddars and parmesan cheese in a medium-sized bowl. Remove 1 cup and set aside.
In a large Dutch oven or heavy bottom sauce pot, melt 1 tablespoon of butter over medium-low heat. Add the onions and garlic, cooking and stirring until translucent, approximately 3-5 minutes. Stir in half the sage and cook until fragrant, approximately 30 seconds. Add the remaining butter and melt, then add the flour to form a paste. Using a spatula, stir the paste for approximately 1-2 minutes, then ladle in some of the milk, stirring. Slowly add in the remaining milk, stirring, and turn the heat up to medium-high.
Whisk constantly as the sauce heats up and thickens. Once it is thick, remove the sauce from the heat and whisk in the cheese until smooth, omitting the reserved cup. Whisk in the mashed butternut squash and remaining salt and pepper.
Combine the macaroni, cheese sauce, and roasted squash, then spread evenly into a 9x13 casserole dish. Top with the reserved cheese and sage. (Note: if you are preparing the dish in advance, cover with plastic wrap and store in the refrigerator until it’s time to cook).
Bake in a 350 degrees F oven for 40 minutes, or until the top is melted and the sides are beginning to bubble.