Preheat oven to 400 degrees F. Warm 1 tablespoon oil in a medium cast iron skillet over medium-low heat. Add onion, season with ¼ teaspoon salt and cook, stirring occasionally, until onion is tender, 6 to 8 minutes. Transfer to a small bowl.
Add 1 more tablespoon oil to the skillet over medium heat. Add cabbage, season with ¼ teaspoon of salt and pepper and cook, stirring occasionally, until very tender, about 7 to 10 minutes. Add sage and sauté for 1 minute. Return onion to skillet.
In a large bowl, beat eggs with ½ teaspoon salt and ¼ teaspoon pepper and pour into the skillet. Sprinkle with Gruyère and cook until the edges are set, about 5 minutes.
Transfer skillet to oven and bake until frittata is cooked through, about 10 to 12 minutes more.
While frittata is baking, make salad: In a large bowl, whisk together 1 tablespoon olive oil, lemon juice, and honey and season with salt and pepper. Add cabbage, celery, and apple and toss to combine. Divide salad among serving plates and top with walnuts, if desired. Slice frittata into wedges and serve with salad.