Put a large pot of salted water on to boil.
Trim the tough bottom ends from the asparagus and cut the spears diagonally into 1-inch segments. In a large sauté pan, cook the bacon over medium heat until light golden brown, about 10 minutes. With a slotted spoon, transfer the bacon to a plate lined with paper towels, leaving as much fat in the pan as possible. Add the onion to the pan, and sauté until softened, about 5 minutes. Increase the heat to medium high and continue to cook, stirring frequently, until the onion browns around the edges, another 5 to 6 minutes. Transfer to a small bowl, return the pan to medium-high heat, and add the oil. As soon as the oil is hot, add the asparagus, sprinkle with 1/4 tsp. salt, and cook, stirring frequently, until the asparagus is crisp-tender and brown in spots, 3 to 5 minutes. Keep warm.
Cook the penne in the boiling water, stirring occasionally, until al dente, 8 to 10 minutes. Meanwhile, whisk the eggs with 1/4 tsp. salt in a small bowl and then stir in the Parmigiano until well blended. Drain the pasta. In a large serving bowl, immediately toss the hot pasta with the egg and cheese mixture. Add the asparagus, onion, and bacon, and toss well. Season with a generous amount of pepper and toss well again. Serve with a sprinkling of the Parmigiano.