sphere =
SphericalPlot3D[5, {θ, 0, π}, {φ, 0, 2 π},
RegionFunction -> Function[{x, y, z}, x^2 + y^2 >= 2^2],
Boxed -> False, Axes -> False, MeshStyle -> White,
ColorFunction -> Function[{x, y, z}, ColorData["Rainbow"][z]],
PlotStyle -> Opacity[.5]];
cylinder =
ContourPlot3D[
x^2 + y^2 == 2^2, {x, y, z} ∈ Ball[{0, 0, 0}, 5],
RegionBoundaryStyle -> None, ContourStyle -> FaceForm[Yellow, Red],
Mesh -> None];
Show[sphere, cylinder]

- If we do not use the expression of sphere and cylinder, we could use
OpenCascadeLink and FEM to separate the exterior sphere and interior cylinder faces. see the answer by @user21
Clear["Global`*"];
Needs["OpenCascadeLink`"];
Needs["NDSolve`FEM`"];
reg1 = Ball[{0, 0, 0}, 5];
reg2 = Cylinder[{{0, 0, -5}, {0, 0, 5}}, 2];
shape = OpenCascadeShapeDifference[
OpenCascadeShape /@ {reg1,reg2}];
bmesh = OpenCascadeShapeSurfaceMeshToBoundaryMesh[shape,
"ShapeSurfaceMeshOptions" -> {"AngularDeflection" -> .05}];
mesbm = Flatten[
MeshElementSplitByMarker[
MeshOrderAlteration[bmesh, 1]["BoundaryElements"]]];
{sphere, cylinder} =
MeshRegion[bmesh["Coordinates"], Polygon[ElementIncidents[#]]] & /@
mesbm;
{RegionPlot3D[sphere,
ColorFunction -> Function[{x, y, z}, ColorData["Rainbow"][z]],
PlotStyle -> Opacity[.5], MeshFunctions -> {#3 &, ArcTan[#1, #2] &},
Mesh -> 20, MeshStyle -> White, Boxed -> False],
Graphics3D[{EdgeForm[], FaceForm[Yellow, Red], cylinder}]} // Show

- Reply to comment for sphere and cone ets.
Clear["Global`*"];
Needs["OpenCascadeLink`"];
Needs["NDSolve`FEM`"];
clip[reg1_, reg2_] := Module[{shape, bmesh, mesbm, regs},
shape = OpenCascadeShapeDifference[OpenCascadeShape /@ {reg1, reg2}];
bmesh =
OpenCascadeShapeSurfaceMeshToBoundaryMesh[shape,
"ShapeSurfaceMeshOptions" -> {"AngularDeflection" -> .05}];
mesbm = Flatten[MeshElementSplitByMarker[bmesh["BoundaryElements"]]];
regs =
MeshRegion[bmesh["Coordinates"], Polygon[ElementIncidents[#]]] & /@
mesbm;
{RegionPlot3D[regs[[1]],
ColorFunction -> Function[{x, y, z}, ColorData["Rainbow"][z]],
PlotStyle -> Opacity[.5],
MeshFunctions -> {#3 &, ArcTan[#1, #2] &}, Mesh -> 20,
MeshStyle -> White, Boxed -> False],
Graphics3D[{EdgeForm[], FaceForm[Yellow, Red],
regs[[Complement[
bmesh["BoundaryElementMarkerUnion"], {1}]]]}]} // Show]
reg1 = Ball[{0, 0, 0}, 5];
reg2 = Cone[{{1, 3, -5}, {2, -7, 5}}, 4];
clip[reg1, reg2]

reg1 = Ball[{0, 0, 0}, 5];
reg2 = TransformedRegion[Ellipsoid[{0, 0, 0}, {7, 2, 3}],
RotationTransform[π/3, {1, 1, 1}]];
clip[reg1, reg2]

reg1 = Ball[{0, 0, 0}, 5];
reg2 = FilledTorus[{3, 2, 1}, {3, 5}];
clip[reg1, reg2]

CSGRegion["Difference", {Style[Ball[{0, 0, 0}, 5], Blue], Style[Cylinder[{{0, 0, -5}, {0, 0, 5}}, 2], Red]}]? $\endgroup$