You remind me that at some point in my career I did a course in production engineering and as part of that we did a lab exercise in detecting flaws in steel bars using an ultrasonic sensor. Sounds very similar to your set up.
It was crude setup with only a scope connected to the sensor output. When an echo was returned there was a distinct pulse appearing on the screen. It's left/right position on the screen indicating the echo return time, hence depth to a flaw in the steel. We could easily see the tiny holes drilled in the sample bars we were given.
Sorry I forget the time scales or amplitudes involved but I bet they were similar to yours.
So I suggest you get down to your lab and hook a scope to your sensor and see exactly what kind of signal we are dealing with here. What is the echo return time, what pulse width, rise and fall time, amplitude.
Then we can think about a fool proof way to detect it.
Perhaps this wouldn't work, as the reflected wave is supposed to be very low, only millivolts in amplitude.
Never mind "supposed" go and measure it. It may well only be millivolts. You seem to be wanting to use an ADC as an amplifier. Well, that is what op-amps are for. You might need to use a instrumentation amplifier if a differential signal is called for to eliminate noise.
I imagine you will need some filtering to block low frequency noise, "mains hum" and possibly block high frequency noise.
Once you have a good amplitude, low noise pulse a schmitt trigger will get you a nice pulse edge to feed into a Pi GPIO or whatever you decide to measure it with.
It just seems to me that having long dangly wires feeding raw tiny signals into an ADC and expecting to see the pulses amongst the noise flipping the low bits is a recipe for failure. Never mind the sample rate problems.
We can only tell by looking at it with the scope.
Memory in C++ is a leaky abstraction .