Warm a large skillet or pot over medium heat. Add the olive oil and butter.
When the butter foams, stir in the shallot and a pinch of salt. Cook 2–3 minutes until soft.
Add the garlic and cook 30 seconds until fragrant. Stir in the orzo and cook 1–2 minutes to lightly toast the pasta.
Pour in the broth, salt, pepper, and red pepper flakes if using.
Bring to a gentle boil, then reduce to a lively simmer.
Cook uncovered, stirring often to prevent sticking, until the orzo is tender and most of the liquid is absorbed, about 8–10 minutes. If it looks dry before the pasta is done, add a splash of broth or water.
Lower the heat. Stir in the spinach, letting it wilt, 1–2 minutes.
Remove from heat.
Add the Parmesan and lemon zest. Stir until creamy. If you’d like it looser, mix in the milk or half-and-half.
Finish with lemon juice to brighten.
Taste and adjust seasoning with more salt, pepper, or lemon. Top with extra Parmesan and herbs if you like. Serve warm.