Here is a slightly compacted re-implementation of Kuba's routine. Its only caveat is that it will not work for gradients with non-equispaced colors, like "BrightBands"
; the routine can be modified for that case, but it will be a bit more complicated.
chimeraColors[cols : {__String}] := Module[{bl, cl},
cl = ColorData[#, "BlendArgument"] & /@ cols;
If[! MatchQ[cl, {cc__?(VectorQ[#, ColorQ] &)}], Return[$Failed]];
bl = Transpose[Join @@@ {MapThread[Rescale[#1, {0, 1}, #2] &,
{Subdivide[Length[#] - 1] & /@ cl,
Partition[Subdivide[Length[cl]], 2, 1]}], cl}];
With[{c = bl}, Blend[c, #] &]]
Some examples:
cfun = chimeraColors[{"DeepSeaColors", "ThermometerColors", "SolarColors"}];
LinearGradientImage[cfun, {600, 60}]

cfun = chimeraColors[{"Pastel", "CMYKColors"}];
Colorize[ExampleData[{"Texture", "Bubbles"}], ColorFunction -> cfun,
ColorFunctionScaling -> False]

Added 6/30/2016
I present here a routine for the generalization of the OP's desire to use different color gradients in different intervals. This avoids the slowness observed by Kuba and the Wizard by directly constructing a Blend[]
function from stitched-together pieces of the component color gradients. Here it is:
bricolage[lst : {{_?NumericQ, _String} ..}] := Module[{cc, cl, dc, dl, gl, il, kl, nl},
{nl, gl} = Transpose[SortBy[lst, First]];
If[! (And @@ Thread[0 <= nl <= 1]) ||
Complement[gl, DataPaclets`ColorDataDump`gradientSchemeNames] =!= {},
Return[$Failed]];
nl = Sort[nl]; If[Last[nl] != 1, AppendTo[nl, 1]];
cl = ColorData[#, "BlendArgument"] & /@ gl;
If[MemberQ[cl, l_ /; ! VectorQ[l, ColorQ]], Return[$Failed]];
kl = (Length /@ cl) - 1; dl = Subdivide /@ kl; il = Partition[nl, 2, 1];
dc = MapThread[Take[#1, Floor[#2 #3] + {2, 1}] &, {dl, il, kl}];
cc = MapThread[Take[#1, Floor[#2 #3] + {2, 1}] &, {cl, il, kl}];
cc = MapThread[Flatten[{If[#1[[1]] != #3[[1]],
ColorData[#4, #3[[1]]], Nothing],
#2,
If[#1[[-1]] != #3[[-1]],
ColorData[#4, #3[[-1]]], Nothing]}] &,
{dc, cc, il, gl}];
dc = MapThread[Union[Flatten[Insert[#2, #1, 2]]] &, {dc, il}];
With[{l = Flatten[{dc, cc}, {{2, 3}, {1}}]}, Blend[l, #] &]]
At the moment, the routine does not support color gradients where the colors are not equispaced (e.g. "BrightBands"
or "M10DefaultDensityGradient"
). Otherwise, it works quite well:
(* OP's color function *)
cfun = bricolage[{{0, "AlpineColors"}, {1/2, "SouthwestColors"}}];
LinearGradientImage[cfun, {600, 60}]

cfun = bricolage[{{0, "IslandColors"}, {2/5, "LightTerrain"}, {3/4, "SandyTerrain"}}];
Colorize[ExampleData[{"Texture", "Bubbles"}], ColorFunction -> cfun,
ColorFunctionScaling -> False]

ArrayPlot[RandomReal[1, {10, 10}], ColorFunction -> (Piecewise[{{ColorData["LightTerrain"][#], 0 < # < .5}, {ColorData["TemperatureMap"][#], .5 < # < 1}}] &), Frame -> None]
$\endgroup$