Этого CSS должно хватить:
td { min-width: 100px; }
Однако, это не всегда правильно выполняется (атрибут min-width) всеми браузерами (например, IE6 сильно его не любит).
Редактировать: Что касается решения IE6 (и ранее), то, насколько я знаю, не существует надежного решения при любых обстоятельствах. Использование HTML-атрибута nowrap на самом деле не приводит к желаемому результату, так как это просто предотвращает разрывы строк в ячейке, а не указывает минимальную ширину.
Однако, если nowrap используется в сочетании со стандартным свойством ширины ячейки (например, с использованием width: 100px), 100px будет действовать как минимальной ширины, и ячейка будет по-прежнему расширяться с текстом ( из-за Nowrap). Это не совсем идеальное решение, которое не может быть полностью применено с использованием CSS, и поэтому его было бы утомительно реализовать, если у вас есть много таблиц, к которым вы хотите применить это. (Конечно, все это альтернативное решение не работает, если вы хотите, чтобы в ваших ячейках были динамические разрывы строк).