The problem is that when using, look at to set CFrame it makes that the Lookvector is facing the seccond position. One option is that you change the scale of the part so the X Size is swapped with the Z Size of the Part.
Are you assuming at the start that (point1.Position - part.Position) and (point2.Position - part.Position) are orthogonal, or are they arbitrary points in space? And is this also assuming that the Part should turn in place, with part.Position not changing?
The case of already orthogonal “handles” is pretty easy, and even if the alignment is not perfect, when you assign the CFrame to part.CFrame, orthonormalization that’s done by the Roblox engine will fix small numerical issues for you.
local right = (point2.Position - part.Position).Unit
local up = (point1.Position - part.Position).Unit
local look = right:Cross(up)
part.CFrame = CFrame.fromMatrix( part.Position, right, up, look )
I don’t know which sides of your grey part are front vs back, left vs right, etc., so you might have to change the sign of ‘right’ and/or ‘up’ to get what you’re after.
The case of doing a “best fit” sort of alignment to 2 arbitrary points in space is more work, and depending on your use case, it may be desirable to give one point priority (e.g. align perfectly to point1 first), and then project the second point onto the plane orthogonal to (point1.Position - part.Position) and align to that. Kinda depends on what you’re trying to do, exactly.