Нормально ли использовать sprintf() для конкатенации строк в php?
в компонентах симфони пару раз видел sprintf(). Не моветон, можешь использовать, главное если начал - то делай так во всём проекте. Единобразие важнее.
Используйте функции в соответствии с их предназначением.
Если вам не нравится mess код в представлениях, используйте шаблонизаторы. Например Smarty. 
Альтернатива шаблонизаторам - использование простого шаблона вместе с str_replace. Это достаточно быстрая функция и обладает необходимой гибкостью. Вы можете передавать массивы в качестве аргументов, что очень удобно.