Cook the macaroni according to package directions until al dente. Drain well.
1 pound elbow macaroni
In a large saucepan, melt the butter over medium heat.
4 tablespoons unsalted butter
Whisk in the flour and cook for 1-2 minutes, stirring constantly to form a smooth paste (a roux).
4 tablespoons all-purpose flour
Slowly whisk in the milk, ensuring no lumps form.
3 cups milk
Continue stirring until the sauce thickens, about 5-7 minutes.
Stir in the salt, pepper, garlic powder, and onion powder.
1/2 teaspoon salt, 1/4 teaspoon black pepper, 1/4 teaspoon garlic powder, 1/4 teaspoon onion powder
Remove from heat and add the cheddar cheese and Gruyere cheese (if using). Stir until the cheese is completely melted and the sauce is smooth.
4 cups shredded cheddar cheese, 1 cup shredded Gruyere cheese (optional, for extra flavor)
Add the cooked macaroni to the cheese sauce and stir to coat evenly.
1 pound elbow macaroni
In a small bowl, mix the breadcrumbs with the melted butter. Sprinkle over the macaroni and cheese.
1/2 cup breadcrumbs, 2 tablespoons melted butter
If using topping, preheat oven to 350°F (175°C) and bake for 15-20 minutes, or until golden brown.
Serve hot and enjoy!