In a large pot, cook pasta according to package directions.
In a small saucepan, sauté onions and garlic in olive oil until browned.
In a large saucepan, melt butter; add flour and stir. Slowly, add half-and-half and milk and simmer, stirring constantly, until thickened.
Add cheese and seasonings; stir until cheese melts. Add tomatoes, spinach and onion mixture; heat through.
Pour over warm pasta, toss and serve.