Cursor position after lcd.print() and lcd.scrollDisplayLeft()

rwiens:
My only question is whether I will be able to loop through 40 positions (x2 lines) fast enough.

"fast enough" is a relative term.
How fast do you need to update the display? How often? How many cycles are used by other stuff?

The supplied LiquidCrystal library can update a full 16x2 display around 87 times per second or in around 11.5ms
If you switch to fm's LiquidCrystal library replacement,
it can update a full 16x2 display around 300 times per second or in around 3.3ms

The key to keeping the display updates fast and avoiding flicker is to avoid using lcd.clear() and lcd.home()
Those commands are quite slow.
With fm's library you can update the entire 16x2 display faster than time it takes lcd.clear() to execute.

You may want to consider managing a shadow display buffer in RAM.
Fill it in the way you want the display to look. Then, slam out the buffer to the display.
You can manage the shadow buffer anyway you like.
Either creating a full shadow buffer of all the display ram that you index into to create the scrolling effect
or just have the local buffer represent what will be displayed on the lcd.
I would think that even the supplied LiquidCrystal display should be more than fast enough to
do what you need.

--- bill