When you're focused on the cell press enter to get into edit mode:
this is how you perform split after each 5 characters:
=JOIN(CHAR(10), SPLIT(REGEXREPLACE(TO_TEXT(A1), "(.{5})", "/$1"), "/"))

therefore, try something like this:
=JOIN(CHAR(10), SPLIT(REGEXREPLACE(TO_TEXT(
IFERROR(VLOOKUP(B1, IMPORTRANGE("source", "B2:C"), 2, 0))),
"(.{50})", "/$1"), "/"))
On the Google Developer site, Google Apps Script, the following tutorial can be found: Interacting With Your Docs List. In section 3, it describes how to save a selected range to CSV.
This particular line of code introduces a carriage return:
// Join each row's columns
// Add a carriage return to end of each row, except for the last one
if (row < data.length-1) {
csv += data[row].join(",") + "\r\n";
}
else {
csv += data[row];
}
If you run this script and select a particular range, the CSV file will show up (in notepad) having line breaks:
I've added the code below and only revised the onOpen script:
function onOpen() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var csvMenuEntries = [{name: "Save as CSV file", functionName: "saveAsCSV"}];
ss.addMenu("CSV", csvMenuEntries);
}
function saveAsCSV() {
// Prompts the user for the file name
var fileName = Browser.inputBox("Save CSV file as (e.g. myCSVFile):");
// Check that the file name entered wasn't empty
if (fileName.length !== 0) {
// Add the ".csv" extension to the file name
fileName = fileName + ".csv";
// Convert the range data to CSV format
var csvFile = convertRangeToCsvFile_(fileName);
// Create a file in the Docs List with the given name and the CSV data
DocsList.createFile(fileName, csvFile);
}
else {
Browser.msgBox("Error: Please enter a CSV file name.");
}
}
function convertRangeToCsvFile_(csvFileName) {
// Get the selected range in the spreadsheet
var ws = SpreadsheetApp.getActiveSpreadsheet().getActiveSelection();
try {
var data = ws.getValues();
var csvFile = undefined;
// Loop through the data in the range and build a string with the CSV data
if (data.length > 1) {
var csv = "";
for (var row = 0; row < data.length; row++) {
for (var col = 0; col < data[row].length; col++) {
if (data[row][col].toString().indexOf(",") != -1) {
data[row][col] = "\"" + data[row][col] + "\"";
}
}
// Join each row's columns
// Add a carriage return to end of each row, except for the last one
if (row < data.length-1) {
csv += data[row].join(",") + "\r\n";
}
else {
csv += data[row];
}
}
csvFile = csv;
}
return csvFile;
}
catch(err) {
Logger.log(err);
Browser.msgBox(err);
}
}
Newline in :msgBox
Browser.msgBox('line 1 \\n line 2');
Please note you need to escape '\n' with additional backslash.
one solution would be to resize font on a minimum value. this would reduce row to 32px (while default is 21px)
also in a certain situation, this could be reduced even more by changing the direction of the text to vertical, however, this highly depends on the chosen font. for example this formula: includes 4 thick characters per row so by selecting a thin font like Amatic SC, Wire One or Economica and changing the direction of text from horizontal to vertical, there is possible to get 21px or even less simply by resizing font to 6px.="MMMM"&CHAR(10)&CHAR(10)&"MMMM"

there is also one more solution - to merge such row with the row above or below - this way you don't need to change the font, size nor rotation (custom row height is magically unlocked):

This is not possible at the moment. Only thing I can think of is to use a clipboard app and copy-paste a soft linebreak into Google keep.