tput bold writes the character sequence that is to be used to tell the current terminal it is running in to start writing in bold.
It knows the type of the terminal based on the value of the $TERM environment variable. That variable is set by terminal emulators or by getty.
tput queries the termcap or terminfo databases to know what sequence to use for a given attribute for a given terminal type.
For instance, when running in an xterm, where $TERM will be something like xterm or xterm-256color, tput bold will write \e[1m which is the sequence recognised by xterm (and most modern terminal emulators) to start writing in bold. When running in an hpterm, it will send \e&dB instead.
When a script is running from cron, it is not running in a terminal. If you want it to send a sequence to enable the bold attribute, you need to tell it for what terminal that should be, by setting the $TERM environment variable.
Maybe something like:
export TERM="${TERM-xterm}" # set $TERM to xterm if not set
printf '%s\n' "$(tput bold)start write to log$(tput sgr0)" >> /tmp/log.txt
Then your /tmp/log.txt will contain the xterm sequence to turn bold on. When the content of the file is sent to a xterm terminal emulator, it will be displayed in bold, YMMV for other terminals.