Please split your posting into single questions and try to find a solution for them on your own first. I try to help when someone gets stuck, but I'm not going to do your job.

Regarding the min/max optimization. It is implemented in all branches >= 6.2 and can be activated by setting the QwtPlotCurve::FilterPointsAggressive ( fast algo can be done inside the update cycle ) flag.

But even with having all optimizations enabled I don't recommend to pass all 5 million points to the plot and you should do some sort of preprocessing to reduce the number of points.
Maybe overload QwtSeriesData<QPointF> and do some magic behind the scenes. F.e you can calculate different data sets according to the zoom level using QwtWeedingCurveFitter ( too slow to do it in the update cycle ! ).

Showing real time data with a certain refresh rate is a different story. But in general you should always decouple the update rate from the sample rate - drawing each point as it arrives is no good idea. There is not much sense in having a higher refresh rate than let's say 10fps - a line plot is no movie, where the complete screen gets updated with each frame.

In all branches >= 6.2 you will find a lot of spline interpolation algos implemented, while in 6.1 you only have the cubic spline algo, that is expensive and its implementation is broken. If it is only about making a curve smooth spline interpolation is a good option.

Uwe