Adjust oven racks to upper-middle and lower-middle positions and heat the oven to 400 degrees F. Slice bread in half lengthwise then slice each half into ½ inch-thick slices. Spread the bread in single layers on two rimmed baking sheets and bake until golden, 10-15 minutes, flipping bread and switching and rotating sheets halfway through (or bake one sheet pan at a time). Take care not to let the bread burn - it should be golden brown and toasted. Let the bread cool for 15 minutes.
In a large skillet over medium heat, cook the sausage and onion until the pork is no longer pink, breaking the meat into bite-sized pieces as it cooks.
Lightly coat a 9X13-inch baking dish with cooking spray. Shingle half of the bread in the prepared pan so that the edges overlap slightly (a couple of times when I've made this, my slices weren't long enough to shingle so I just placed the bread in a single layer and it worked fine). Top with half of the sausage mixture and 1 cup cheese. Repeat with remaining bread, remaining sausage mixture, and remaining cheese.
In a large bowl, whisk eggs, milk, salt, pepper, and hot sauce together. Pour evenly over the assembled casserole. Place the casserole on a rimmed baking sheet and wrap the casserole with plastic wrap, pressing the plastic wrap lightly on the top of the casserole. Fill another 9X13-inch dish with cans of food (beans, fruit, whatever) and nest the weighted dish on top of the assembled casserole. You'll be glad you placed the assembled casserole on a rimmed baking sheet at this point as there may be a bit of spillage over the sides as the casserole compacts. This will help the bread soak up the egg mixture. Refrigerate for at least 1 hour and up to 24 hours.
When ready to bake, adjust oven rack to middle position and heat oven to 350 degrees F. Let casserole stand at room temperature while the oven is heating. Remove weights, unwrap casserole, and bake until the edges and center have puffed and the top is golden brown, about 1 hour. Let it cool for 10 minutes before serving.