Панацеи в этом вопросе нет. Если заказчик считает, что писать ТЗ легко, то пусть пишет. Главное, чтобы вы смогли грамотно реализовать по его ТЗ работу.
Но лучше всего практиковать 2 варианта:
1. Писать ТЗ до заключения договора, с риском бесплатной работы. При этом необходимо (может быть завуалированно) включать в стоимость договора стоимость разработки ТЗ. Сомневаюсь, что из 10 заказов (из 10 бесплатных ТЗ), например, никто не заключит с вами договор. Грубо говоря, отнеситесь к расходам на написание ТЗ также, как к оплате аренды офиса — от этого никуда не деться.
2. Отдельный договор на написание ТЗ. Но при этом нужно все равно предварительно договариваться о рамках бюджета. Иначе, если заказчик оплатит вам ТЗ, но окажется, что стоимость основного договора по составленному ТЗ слишком для него высока — он может и обидеться. Зато, и это тоже аргумент ЗА отдельный договор, он сможет с этим ТЗ (если оно грамотно составлено) обратиться для реализации задачи в другую компанию, если не договорится с вами.
По опыту могу сказать, мы используем оба варианта. Смотрим на клиента сначала и потом договариваемся.
P.S. Заключать один договор (на ТЗ + разработка) нельзя. Тут вы правы, в случае увеличения стоимости, будет очень сложно доказать это заказчику и изменить сумму договора. Иногда потери от этого могут привысить затраты на «бесплатное» написание ТЗ (см. пункт 1).