I would set my detail line as you have it, capturing the name even if it doesn't exist on the row. I would then create a footer template that would capture the lines that just contain the name. This allows that field to populate up. You would then need to create a formula field to compare the detail name to the footer name. If the detail name is blank, then use the footer field name, otherwise use the detail name. I will try to update my response with screenshots and formulas later if you need more info.
In regards to the page break, if each page is separated by "Total members terminated....", you might try trapping that as a page header (even though it is at the bottom of the page). Page header templates have some special properties that allow fields to span two pages. I haven't set up anything to test your scenario so it might not work, but worth checking out.
Your original approach to create a lookup table as a first pass of a 2 pass approach is very a very solid solution that is applicable broadly across this scenario and near but not quite exact examples.
Chris's solution is very elegant and works well in this example.
The third possible approach that people might find handy if the data does not play nicely in this type of problem would be to extract all of the lines just as they are as a single field per line.
Work out a sort field (probably a calculated field) for the data and invert the order of the fields in the table with the sort.
Output a revised version of the resorted report to a new report.
You now have a report for which you can use the "Fill from previous line" option. At also uses pretty much the same extraction model since the data structure across the row is the same.
All the approaches have merit in this situation and which works best for the occasion probably comes down to some nuance of data presentation in the specific report that requires analysis.