LazPaint is able to open a 1539 mb non standard uncompressed TIFF file and its more standard 1350 mb variant, but it takes 8 minutes to do so instead of 3-10 seconds. Loading the preview in the load dialog only takes seconds, though still is slower than loading the whole image in Nomacs (QT + OpenCV based).
LazPaint hits over 280 mio virtual memory pagefaults while loading the image (580 - 750k per second), while Nomacs finishes at only 1.7 mio. There also seem to be more pagefaults while scrolling around the zoomed image, but I did not test that thoroughly.
Scrolling in the zoomed image is smooth between 200 - 500%, but more juddery below 200% and above 500% (when the grid shows up).
There also is a visible "rolling shutter" effect skewing straight lines during left/right scrolling because of the image is build/refreshed from top to bottom.
The error with the 3 gb file happens when the preview is supposed to be created in the load dialog, it does not crash and another image can be chosen/opened afterwards.
Judging from this observations it seems that building the backend on top of OpenCV seems like a good idea, which in turn points more towards C++. There are some OpenCV Delphi/Lazarus ports, but they don't seem to be actively maintained!?
Using a C++ backend in combination with a Lazarus UI might be viable, but I don't know how well this could be integrated (maybe even using 2 processes via inter-process communication via shared memory)?!