In a medium saucepan, whisk together 1/2 cup all-purpose flour and 1 cup granulated sugar until no lumps remain. Gradually whisk in 1 cup whole milk until the mixture is completely smooth.
Place the saucepan over medium heat and cook the mixture, stirring constantly with a whisk or silicone spatula, for 5-7 minutes until it thickens to a very thick, pudding-like consistency that leaves a clear path on the bottom of the pan when you scrape it with your spatula.
Immediately scrape the hot paste into a clean, heatproof bowl. Press a piece of plastic wrap directly onto the surface to prevent a skin from forming, and let it cool completely to room temperature, which should take about 1 hour at room temperature or 30 minutes in the refrigerator.
In the bowl of a stand mixer fitted with the paddle attachment, beat 1 cup of softened unsalted butter on medium-high speed for 5-7 minutes until it becomes very light, pale, and fluffy, scraping down the sides of the bowl as needed.
With the mixer on low speed, begin adding the completely cooled flour paste one large spoonful at a time, allowing each addition to fully incorporate before adding the next. After all the paste is added, scrape down the bowl.
Increase the mixer speed to medium-high and beat the frosting for a full 5-7 minutes until it is extremely light, smooth, and fluffy, transforming from a slightly curdled look to a silky, whipped buttercream texture.
Add 1 teaspoon vanilla extract and 1/4 teaspoon salt, then beat for one more minute on medium speed until the flavorings are fully incorporated. Use immediately to frost your completely cooled cake.