Preheat oven to 350 degrees. Spray a 9x13 inch (an 11x7 inch works too) casserole dish with cooking spray. Once oven is preheated, toast all the bread cubes on a cookie sheet for 7-10 minutes or until they resemble croutons. Remove from oven and add half of the toasted bread cubes to the bottom of the casserole dish, creating an even layer. Reserve the other half.
Heat the olive oil in a medium saucepan over medium heat. Add onions and salt, and stir to coat onions in oil. Sauté over medium heat for 10-15 minutes, or until onions have softened and begun to brown. Continue to cook for an additional 10-15 minutes until onions caramelize. Once golden brown, remove from heat and set aside until ready to use.
While onions are caramelizing, brown sausage in a separate skillet over medium heat, breaking into small chunks with your spatula. Once sausage is browned on all sides, remove from heat and add half the sausage in an even layer over the toasted bread cubes in the casserole dish. Make another layer with half the caramelized onions, then half of the shredded cheddar cheese.
Add the rest of the toasted bread cubes over this, followed by the rest of the sausage, onions and cheese.
Whisk together milk and eggs. Pour this mixture over the top of the entire casserole. Gently press the bread mixture down so that everything is moistened by the milk and eggs.
Cover and refrigerate for 2-24 hours (overnight is best!).