Modification of pInsert from stackexchange lets you go deeper
insertPart[origList_, repList_, posList_] :=
Module[{replaceRules},
replaceRules =Thread[Rule[#[[1]],Sequence[#[[2]], Part[origList, Sequence @@ (#[[1]])]]] & /@
Join @@ (Thread /@ Transpose[{posList, repList}])];
ReplacePart[origList, replaceRules]]
insertPart[origlist, {r, x}, {{1}, {5}}]
{r, a, b, c, d, x, e, f, g}
Multiple insertions for the same element
insertPart[origlist, {r, x}, {{1}, {5, 2}}]
{r, a, x, b, c, d, x, e, f, g}
Multiple insertions at lower levels
insertPart[{{a, b}, {c, d}}, {xx}, {{{2, 1}, {1, 2}}}]
{{a, xx, b}, {xx, c, d}}