Whisk the active dry yeast into the warm milk in a mixing bowl until dissolved.
Add 1/2 cup of the bread flour to the yeast mixture and stir until you have a dry, chunky mixture.
Cover the chunky mixture with the remaining bread flour, the all-purpose flour, sugar, and salt. Cover and let sit at room temperature for 30 minutes to allow the flours to hydrate and the yeast to begin working.
With a stand mixer fitted with the dough hook, add 3 eggs and mix on medium speed about 10 minutes, scraping the bowl as needed, until the dough begins to come together.
Add the remaining egg and mix 3 more minutes until incorporated.
Gradually add the unsalted butter in pieces, mixing each piece in completely before adding the next and scraping the bowl often; continue until the dough is shiny and elastic.
Place the dough in a bowl large enough for it to double, cover with plastic wrap, and let sit at room temperature for 1½ hours.
Fold the dough over itself, cover again with plastic wrap, and refrigerate overnight.
When ready to fry, portion the chilled dough into about 40 pieces of 1/2 ounce each; if the dough is sticky, use a small cookie scoop and drop portions directly into the hot oil.
Heat oil in a deep pot or fryer to 350°F (use a thermometer). Fry the donut holes a minute or two per side until golden brown and cooked through.
Remove with a slotted spoon, drain briefly, then toss while warm in granulated sugar to coat; serve immediately.