I think 343 did a great job designing the score system. You get 100 points for kills, 50 for assists, 10 for little things like marking, lots of points for objectives, and some bonus points for doing cool stuff. That’s how XP should be awarded, in my opinion, and that would allow 343 to use algorithms they’ve already created. At the end of every match, players should just be awarded XP equal to 1/10th of their score.
SO, if you got 1000 points, you get 100 XP. If you get 2000, you get 200 XP. It rewards players for both skill and success in the game, and would also absolve the sluggishness of the current system that people are currently frustrated about. If they wanted to keep it slower, they could even make it 1/20th and I think it would still be a fun system.