The method you describe is basically the simplest way to align a header horizontally to the body text so I won't propose a different method, but I have some tips and tricks.
Enter the kerning value manually
What happens when you press Alt + ← is that you decrease the Kerning between the characters on the left and right side of the text cursor.
Kerning is measured in 1/1000 em. 1 em equals the chosen font size so it's a relative unit. It's only possible to use integer values so no decimals.
The keyboard increment is set in Preferences > Units & Increments > Keyboard Increments > Kerning/Tracking and the default value is 20.
To get more precision you can change that value to 1, but I find it simpler to use the arrows until I find the best possible match and then manually enter a more precise value by trial and error.
Use an Indent to Here character instead of white space
Using a white space as the first character is fine, but I prefer to use a character which has no width so I can adjust the header from its initial position. The Indent to Here character works well because it has no real use in the beginning of a paragraph anyway.
Use guides
It's not possible to move entire paragraphs left - only the first line, so it's easiest to just accept the tiny gap there is to the left of the smaller body text and adjust the headers accordingly.
This is easily done by using a guide. Zoom all the way in on the body text, drag a guide that aligns with the left side of the body text and adjust the header to align with the guide.
Calculate the offset precisely
It is possible to calculate the needed offset precisely, but it's not really worth the effort because the kerning value can't have decimals anyway so it's pretty easy to find the closest match manually.
Anyway, the method would be:
- Since you probably measure your font sizes in points temporarily change Preferences > Units & Increments > Ruler Units > Horizontal to points.
- Position a text frame with an "L" in the header paragraph style and an "L" in the body paragraph style so it snaps with the left edge of the page.
- Select the text frame and use Type > Create Outlines to convert the text to vector shapes.
- Use the Gap Tool to measure the offset of the header "L" (shown in cyan) and the body "L" (shown in magenta).
- Now the kerning can be calculated like this:
1000 * (headerOffset - bodyOffset) / headerFontSize
(if you use the Indent to Here character which has no width)
Apply the offset to the Paragraph Style
Once you have found the correct kerning to use it can off course be reused on all headers. This can be semi-automated in the paragraph style of your header by using GREP Styles to apply a character style to the first character.
There are few problems. Kerning can't be saved in a character style since it's applied between characters, so we need to use Tracking instead. But tracking doesn't work on the Indent to Here character so in this case we have to use a white space.
Here is a quick outline of the method. There are some quirks I won't go into details with here (feel free to ask for clarification in comments).
- Insert some white space character in the beginning of the header which you don't use elsewhere, for example a Thin Space.
- Select the Thin Space and apply negative Tracking until the header is correctly aligned.
- Copy the Thin Space to clipboard.
- With the Thin Space still selected create a new Character Style.
- Enter the Paragraph Style of the header and create a new GREP Style.
- Set Apply Style to the character style you just created.
- Paste the Thin Space into the To Text field.
Now whenever you insert a Thin Space in the beginning of a header, it should automatically move into place.
Using Optical Margin Alignment
InDesign does offer a way to optically align margins, but I don't personally like it much (or know much about how to use it).
If you select a text frame (or place the text cursor somewhere in a story) and turn on "Story > Optical Margin Alignment" InDesign attempts to optically align the margins regardless of font size for that particular story.
In my experience it seems to work best if you set Align based on size (the only available setting) to the same as the largest font size used.
The different font sizes becomes aligned, but they move even further to the right leaving a gap in the left side of the text frame. Furthermore the hyphens are allowed to extend outside the text frame in the right side.
This setting applies to the story and can't be a part of a paragraph or object style.