1) Не приходило ли в голову хранить в том JSON-файле перевод сразу всего куска HTML, а не по кусочкам? Тогда бы не пришлось ничего конкатенировать. Тогда в JS было бы достаточно:
$("#debug").html(chrome.i18n.getMessage("debug_page_html"));
Это и по производительности, пожалуй, было бы чуток быстрее.
2) не приходило ли в голову не искать какие-то готовые библиотеки с избыточным функционалом, а просто написать СВОЮ функцию-шаблонизатор, которая бы заполняла пропуски в шаблоне HTML.
Получится как-то так:
$("#debug").html(my_own_function(
'<h1>{{debug_page}</h1><h2>{{key_permissions}}</h2>',
chrome.i18n.getMessage("debug_page"),
chrome.i18n.getMessage("key_permissions")
));
Это ведь не так уж и сложно.