While @eldo's answer was initially useful to me, I found that the color transitions not being exactly on the point that they transitioning on was quite irritating for me. When using data with a size of thousands, it's an irrelevant factor, but I came up with a way that negates this problem. The downside is that the image takes significantly longer to graph the more categories there are, but that should also be a moot point with smaller sample sizes.
The first block is only variable assignment.
templist = {{5, 1}, {5, 2}, {5, 3}, {1, 4}, {1, 5}, {1, 6}, {4,
7}, {4, 8}, {5, 9}, {5, 10}};
lowerBound = 1; upperBound = 1; graphInfo = {};
The second block creates a list containing the lower and upper bounds of each sublist of the data, as well as the color for that sublist.
For[i = 1, i < Length[templist], i++,
If[templist[[i, 1]] != templist[[i + 1, 1]],
{AppendTo[
graphInfo, {lowerBound, upperBound,
If[Mod[Length[graphInfo], 2] == 1, Green, Red]}],
lowerBound = upperBound, upperBound++},
upperBound++]]
graphInfo
{{1, 3, RGBColor[1, 0, 0]}, {3, 6, RGBColor[0, 1, 0]}, {6, 8,
RGBColor[1, 0, 0]}, {8, 10, RGBColor[0, 1, 0]}}
The third and fourth blocks of code create another list that contains the actual data as well as the color for each sublist.
AppendTo[graphInfo, {lowerBound, upperBound,
If[Last[graphInfo][[3]] == Red, Green, Red]}];
graphsData = {};
For[j = 1, j <= Length[graphInfo], j++,
AppendTo[graphsData, {Take[
templist[[All, 2]], {graphInfo[[j, 1]], graphInfo[[j, 2]]}],
graphInfo[[j, 3]]}]]
counter = 0;
For[l = 1, l <= Length[graphsData],
l++, {graphsData[[l,
1]] = {Table[{counter + i, graphsData[[l, 1, i]]}, {i,
Length[graphsData[[l, 1]]]}]},
counter = counter + Length[graphsData[[l, 1, 1]]] - 1}]
graphsData
{{{{{1, 1}, {2, 2}, {3, 3}}}, RGBColor[
1, 0, 0]}, {{{{3, 3}, {4, 4}, {5, 5}, {6, 6}}}, RGBColor[
0, 1, 0]}, {{{{6, 6}, {7, 7}, {8, 8}}}, RGBColor[
1, 0, 0]}, {{{{8, 8}, {9, 9}, {10, 10}}}, RGBColor[0, 1, 0]}}
The final block serves to deploy all of the sublists in graphs.
graphs = {};
For[x = 1, x <= Length[graphsData], x++,
AppendTo[graphs,
ListLinePlot[graphsData[[x, 1]], PlotStyle -> graphsData[[x, 2]]]]]
Show[graphs, PlotRange -> All, GridLines -> Automatic]
And voila:

I have yet to pare down the code to a cleaner state, but it works.
SplitBy
$\endgroup$