Update: Stability Enhancement Using Pseudospectral
Some experimentation shows that a Pseudospectral difference order can prevent the solution instabilities from blowing up and thereby allowing for smaller artificial diffusion.
opts = (Method -> {"MethodOfLines", "SpatialDiscretization" -> {"TensorProductGrid", "MinPoints" -> 1000, "DifferenceOrder" -> "Pseudospectral"}}); kB = 1.380649*10^(-23); mp = 1.6726231*10^(-27); pfun = ParametricNDSolveValue[{D[ni[t, z], t] + D[-c1 D[ni[t, z], z] - (-W[t, z]*ni[t, z]), z] == 0, (16 mp)/(kB*3000*1.5)*ni[t, z] D[W[t, z], t] + D[-c2 D[W[t, z], z] - (-ni[t, z]), z] == 0, ni[0, z] == 100*Exp[-z/100], ni[t, 200] == 100*Exp[-200/100], ni[t, 1000] == 100*Exp[-1000/100], W[0, z] == 0, W[t, 200] == 0, W[t, 1000] == 0}, ni, {t, 0, 1}, {z, 200, 1000}, {c1, c2}, opts, MaxStepFraction -> 1/100]; ifun = pfun[1/10, 1/10]; imgs = Plot[Evaluate[ifun[#, z]], {z, 200, 1000}, PlotRange -> {0, All}] & /@ Subdivide[0, 1, 100]; ListAnimate@imgs

The solution really is starting to look like wave. Perhaps there is a way to recast as such and take advantage of the techniques to stabilize wave simulations.
Original Answer
You could try adding artificial diffusion to both $n_i$ and $W$ and use a finer grid with a higher difference order. For example:
opts = (Method -> {"MethodOfLines", "SpatialDiscretization" -> {"TensorProductGrid", "MinPoints" -> 4000, "DifferenceOrder" -> 10}}); kB = 1.380649*10^(-23); mp = 1.6726231*10^(-27); pfun = ParametricNDSolveValue[{D[ni[t, z], t] + D[-c1 D[ni[t, z], z] - (-W[t, z]*ni[t, z]), z] == 0, (16 mp)/(kB*3000*1.5)*ni[t, z] D[W[t, z], t] + D[-c2 D[W[t, z], z] - (-ni[t, z]), z] == 0, ni[0, z] == 100*Exp[-z/100], ni[t, 200] == 100*Exp[-200/100], ni[t, 1000] == 100*Exp[-1000/100], W[0, z] == 0, W[t, 200] == 0, W[t, 1000] == 0}, ni, {t, 0, 100}, {z, 200, 1000}, {c1, c2}, opts, MaxStepFraction -> 1/100] ifun = pfun[1, 1]; imgs = Table[ Plot[Evaluate[ifun[t, z]], {z, 200, 1000}, PlotRange -> {0, All}], {t, 0, 100}]; ListAnimate@imgs

You will have to determine if the diffusive errors are acceptable, but it does stabilize the solution.
Additional Observations
I agree with xzczd's comment that the BC's and IC's look inconsistent. If they are not, you can see that there are some extremely sharp features to capture in both time and space by zooming in to the solution.
Zoom of Time from 0 - 1 s.

Space and Time Zoom

Adding Growth Factor Refinement to Both Ends of the Domain
As stated previously, there are some fine features to resolve at both ends of the domain. To resolve these features more economically than a uniform mesh, you could consider a non-uniform mesh with geometric growth rate on the ends. Here is one way to accomplish the refinement.
meshGrowth[x0_, xf_, n_, ratio_] := Module[{k, fac, delta}, k = Log[ratio]/(n - 1); fac = Exp[k]; delta = (xf - x0)/Sum[fac^(i - 1), {i, 1, n - 1}]; N[{x0}~Join~(x0 + delta Rest@ FoldList[(#1 + #2) &, 0, PowerRange[fac^0, fac^(n - 3), fac]])~Join~{xf}] ] unitMeshGrowth[n_, ratio_] := meshGrowth[1, 0, n, ratio] unitMeshGrowth2Sided [nhalf_, ratio_] := (1 + Union[-Reverse@#, #])/2 &@ unitMeshGrowth[nhalf, ratio] grid = 200 + 800*unitMeshGrowth2Sided[500, 100000]; ListPlot@grid opts = (Method -> {"MethodOfLines", "SpatialDiscretization" -> {"TensorProductGrid", "Coordinates" -> {grid}, "DifferenceOrder" -> 10}}); kB = 1.380649*10^(-23); mp = 1.6726231*10^(-27); pfun = ParametricNDSolveValue[{D[ni[t, z], t] + D[-c1 D[ni[t, z], z] - (-W[t, z]*ni[t, z]), z] == 0, (16 mp)/(kB*3000*1.5)*ni[t, z] D[W[t, z], t] + D[-c2 D[W[t, z], z] - (-ni[t, z]), z] == 0, ni[0, z] == 100*Exp[-z/100], ni[t, 200] == 100*Exp[-200/100], ni[t, 1000] == 100*Exp[-1000/100], W[0, z] == 0, W[t, 200] == 0, W[t, 1000] == 0}, ni, {t, 0, 100}, {z, 200, 1000}, {c1, c2}, opts, MaxStepFraction -> 1/100] ifun = pfun[1/2, 1/2]; imgs = Plot[Evaluate[ifun[#, z]], {z, 200, 1000}, PlotRange -> {0, All}] & /@ Subdivide[0, 1, 100]; ListAnimate@imgs

By adding the refinement, I was able to reduce the grid by 4x and the artificial diffusion by 2x.
Although the solution my not be valid, stabilizing it through artificial diffusion may give you clues as to where the model breaking down.