1. Filter the input. Insert a series R or L, and parallel C. (If using L and C, add some ESR to the inductor, so that R = sqrt(L/C).) This prevents RF (sharp changes in load, or ambient noise, or..) from being rectified by the LM358 (which it excels at doing).
1a. You have an RC across the amp, which reduces high frequency gain, but doesn't eliminate it: the noninverting configuration has the form 1+ratio, and it's that "one" where the input is fed through, not filtered by C15. The input RC fixes this.
1b. The series resistance also decouples the low-impedance shunt resistor from the amp, so accidental surges (shorting, ESD, etc.) won't destroy it. This can be enhanced by adding clamp diodes (e.g., 2 x 1N4148 or 1 x BAV99, from GND to +IN to +5V)
2. If you aren't limited on current consumption, consider adding a load (R from OUT to GND, or decreasing the feedback resistor values), so the LM358 output stage stays in class A operation. Yes, it's a class C output stage, and yes, even in slow applications like this, it will make itself known!
3. Yeah, nix the FILTER part. C loading is a no-no here. (Again, fix it on the input side!
)
LM358 will pull down to some 10s of mV, and up to about 3V, in this configuration. If that's enough for your application, then you're great. The suggestion of using a better amp might also be entertained; there's no shortage of good ones to choose from, even in a nearby price range.
And if you need reduced power consumption, you can save a lot by using an intentionally slow amp. 5V CMOS op-amps with fT well under 1MHz will run on microamperes!
Tim