How do I make my character not move when pressing both positive and negative horizontal buttons?

You can use GetAxisRaw and trivially recreate the smoothing of GetAxis on a single axis basis with Mathf.Lerp, or on a dual-axis basis with Vector2.Lerp().

You just need one storage variable and the notion of how snappy you want the smoothing.

float axis;  // the "accumulator"
const float Snappiness = 3.0f;  // adjust to suit

and then in Update():

// raw input:
float x = Input.GetAxisRaw( "Horizontal");

// smooth it
axis = Mathf.Lerp( axis, x, Snappiness * Time.deltaTime);

// TODO: now use axis for your input

If you need 2-axis smoothing (blended for vector magnitude), replace float above with Vector2, assemble a new Vector2 from the combined raw axis inputs, and use Vector2.Lerp instead.

As for your actual drift problem, print the values out, see what they are. If they drift, you can search high and low through your hardware drivers and device logic and settings and everything looking for a ghost, or else you can trivially fix it by zeroing them out when they are below a certain magnitude, such as 0.1f or whatever.