If your list is a vector (has no sub-lists) this is perhaps the simplest way, and likely competitively fast:

    m = origlist;
    
    m[[{1, 5}]] = {{r, x}, m[[{1, 5}]]}\[Transpose]
    
    Flatten[m]

>     {r, a, b, c, d, x, e, f, g}

If your list is not a vector (as defined above) we could use a different head for the inserted elements and then replace it with `Sequence` to effect a flatten.  Here is a function that handles both cases, selecting between the methods for best performance:

    multiInsert[list_List, val_, pos_] /; Length@val == Length@pos :=
     Module[{m = list, f},
       If[VectorQ[list],
         m[[pos]] = Transpose @ {val, m[[pos]]}; Flatten[m],
         m[[pos]] = MapThread[f, {val, m[[pos]]}]; m /. f -> Sequence
       ]
     ]

Input is a little different than yours:

    multiInsert[Range@15, {a, b, c}, {3, 7, 13}]

>     {1, 2, a, 3, 4, 5, 6, b, 7, 8, 9, 10, 11, 12, c, 13, 14, 15}