Using Raku (formerly known as Perl_6)
~$ raku -e 'my @a = [Z] lines.map(*.split: "\t"); \
@a.=map: *.join(" "); @a.=map: *.comb(/\" .+? \"/); \
$_.join("\t").put for [Z] @a;' file
[Nota bene: the file supplied by the OP more resembles a groff outputted table than a tsv file. If this was a tsv file, the internal \n in row2/column2 would push row2 data for columns 3,4,5 to the next line].
This solution assumes a substantially cleaned-up input file. Table text has been shortened ("INTERNAL\nNEWLINE" instead of "THIS\nCONTAIN NEWLINE") to visualize the columns better (the code still works on fields with internal whitespace, however). Finally, the third (overflow) line--containing the 'continuation' of columns 2 and 4--has inserted "" column placeholders as described generally by the OP. This ensures that each column has an entry per row, even if it's an empty string.
Briefly, in the first statement for each line, columns are split on \t tabs, then [Z] zip-reduced to transpose rows and columns. The result is assigned to @a array. In the second statement, each row (formerly column) is joined together into a single string, reconstituting the formerly 'broken' double-quoted data in columns 2 and 4.
In the third statement, each row (formerly column) is combed, i.e. broken around double-quoted text, returning 2 elements per row. This 5 x 2 row/column array is then again [Z] zip-reduced (i.e. transposed) to 2 x 5 row/column array, columns are joined via \t tabs, and output.
Sample Input (tab-separated columns):
"column1" "column2" "column3" "column4" "column5"
"DATA1" "INTERNAL "DATA3" "INTERNAL "DATA5"
"" NEWLINE" "" NEWLINE" ""
Sample Output (tab-separated columns):
"column1" "column2" "column3" "column4" "column5"
"DATA1" "INTERNAL NEWLINE" "DATA3" "INTERNAL NEWLINE" "DATA5"
There are two simple ways to better visualize the output columns above: the first is to join on | pipe characters as @Kusalananda did. Replacing the last join("\t") by join("|") instead returns the following:
"column1"|"column2"|"column3"|"column4"|"column5"
"DATA1"|"INTERNAL NEWLINE"|"DATA3"|"INTERNAL NEWLINE"|"DATA5"
The second (and possibly more informative way is to call .raku or .perl on the output, which gives a 'data-dumper'-like return (i.e. a peek at Raku's internal representation of the data). Thus a last statement consisting of .raku.put for [Z] @a; returns the following (note escaped double-quotes):
("\"column1\"", "\"column2\"", "\"column3\"", "\"column4\"", "\"column5\"")
("\"DATA1\"", "\"INTERNAL NEWLINE\"", "\"DATA3\"", "\"INTERNAL NEWLINE\"", "\"DATA5\"")
https://raku.org
unpackresp.printf.