In a small saucepan set over low heat, warm the milk and butter until butter is melted. Remove from heat and let sit until mixture is 120-130°F, about 5 minutes.
In the bowl of a stand mixer fitted with a dough hook, combine two cups of the flour with the yeast, salt, and sugar. Add the warmed milk mixture and the eggs and mix until combined. With the mixer on medium speed, add the remaining flour, 1/4 cup at a time, until dough is thick but still slightly sticky to the touch. Continue to knead on medium speed until smooth and elastic, about 4-5 minutes. Place dough in a greased bowl, cover with plastic wrap, and let rise in a warm place until doubled, about 1 hour.
Gently punch down dough to release gases and let sit for about 5 minutes. On a very lightly floured surface, roll the dough out into a circle about 1/2 inch thick. Use a 3 or 3 1/2-inch round cutter to cut dough into circles. Use a smaller cutter, about 1 inch, to cut out the doughnut holes. Place on a sheet pan lined with parchment, cover with plastic wrap, and let rise in a warm place until puffed, about 30 minutes.
Fill a heavy bottomed pan with vegetable oil at least 4 inches deep and place over medium high heat. Insert a thermometer and heat to 370°F.
When oil is hot, fry doughnuts in small batches until golden brown, about 2 minutes on each side, flipping halfway through. Remove doughnuts with a slotted spoon to paper towels to drain. Top doughnuts as desired (see below).