Direct answer
lazyredraw applies to every scripted screen update, not just macros and mappings. It postpones the physical screen paint for the duration of any command, macro, or script, including :normal, :global, and :substitute. An explicit :redraw inside a plugin will override it, and there is no built-in way to scope that. ttyfast is not worth setting on a modern local terminal; it is a no-op in this context.
What lazyredraw actually covers
lazyredraw is not limited to interactive macros. It defers screen updates for the duration of a single command, macro, or script execution. This applies uniformly to :normal, :global, :substitute, and other Ex commands run from scripts or the command line. The option is about the physical screen paint, not buffer-content changes. In non-interactive use (vim -es, -c, -S, or Ex mode), Vim often skips screen updates entirely unless :redraw is invoked, making lazyredraw largely redundant. The option matters most in interactive macro/script runs where the UI stays visible.
Plugin redraws and lazyredraw
An explicit :redraw (or :redraw!) forces an immediate screen update regardless of lazyredraw. Plugins that call :redraw will bypass the deferral; there is no built-in mechanism to suppress or scope a plugin's :redraw short of patching the plugin or wrapping its calls. If your scratch-buffer plugin calls :redraw during initialization, it will force a redraw. The only way to prevent this is to patch the plugin or wrap its calls. If the plugin uses :redraw! (force redraw including status lines), it cannot be silenced by configuration; consider filing an upstream issue or forking if the redraw is costly.
ttyfast on a modern local terminal
ttyfast tells Vim the terminal can handle fast output (e.g., no padding delays). On a modern local terminal (Linux console, xterm, Wayland terminal emulators) it has no measurable effect in batch mode because Vim already detects a fast terminal and because batch scripts typically run with 'silent' or redirected output where terminal capabilities are irrelevant. In batch context, ttyfast is a no-op.
Verification
To confirm no other script overrides lazyredraw or ttyfast, check :verbose set lazyredraw? ttyfast?. To profile the effect of lazyredraw, run vim --startuptime /tmp/vim.log -S yourscript.vim and compare elapsed time with and without lazyredraw; on batch workloads the difference is typically <1%.
Summary
lazyredraw applies uniformly to scripted screen updates, including :normal, :global, and :substitute. An explicit :redraw in a plugin will override it. ttyfast is not worth setting on a modern local terminal.