Place shrimp on a large flat plate and pat completely dry with a paper towel. Season well with salt and black pepper. Heat a large skillet over medium heat. Add the olive oil to skillet, and when the oil becomes hot, add the butter. When the foaming of the butter subsides, raise the heat to high. Place the shrimp in the skillet and cook, without moving, for 1 minute. Add the garlic, onion or shallots, and optional red pepper flakes, then cook for 1 minute. Turn the shrimp over and cook for an additional 2 minutes. Add the Marsala and lemon juice, then heat the liquid until slightly thickened, about 30 seconds. Sprinkle on the basil and parsley, then stir with a wooden spoon. Season with additional salt and pepper. Remove shrimp to a plate and leave sauce in the pan. Place the cooked and drained spaghetti in a large bowl; pour the sauce from the pan over the spaghetti and toss. Transfer the sauced spaghetti, and any sauce left in the bowl, into a large serving platter. Arrange the cooked shrimp on top of the spaghetti and serve hot with crusty Italian or French bread.